Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

procedura składowana z parametrami wieloznacznymi

Czy próbowałeś go uruchomić ponownie? Podejrzewam, że wezwanie do dyrektora jest teraz częścią twojej procedury. A co powiesz na:

ALTER PROCEDURE dbo.wildcard_name
  @userName NVARCHAR(8) = '%'
AS
BEGIN
  SET NOCOUNT ON;

  SELECT userId, userName
    FROM dbo.user
    WHERE userName LIKE @userName;
END
GO -- <-- this is important! It tells SSMS that your procedure has ended!

EXEC dbo.wildcard_name N'n%';

Kilka innych sugestii, o których nie wypadałoby nie wspomnieć:

  • Podczas tworzenia i wywoływania obiektów należy zawsze określić prefiks schematu. Więc CREATE PROCEDURE dbo.wildcard_name , EXEC dbo.wildcard_name itp.
  • Mam nadzieję, że Twój kod produkcyjny nie używa SELECT * .
  • Gorąco polecam używanie nvarchar zamiast nchar dla swojego parametru.
  • Owiń treść procedury za pomocą BEGIN / END i nie bój się używać wcięć, aby uczynić go bardziej czytelnym.
  • Zazwyczaj będziesz chciał użyć SET NOCOUNT ON; aby zapobiec wpływowi n row(s) affected wiadomości od zakłócania wyników.
  • NVARCHAR parametry powinny mieć przedrostek N (chociaż jestem zdezorientowany, dlaczego naprzemiennie używasz varchar i nchar po pierwsze - są to dwie zmiany, w których spodziewałbym się zera).
  • W zależności od sortowania (i tego, czy wyszukiwanie ma uwzględniać wielkość liter), może być konieczna zmiana klauzuli where za pomocą COLLATE klauzula.

EDYTUJ wydaje mi się, że to działa dobrze, więc proszę wyjaśnij, co robisz inaczej (i czy „nie działa” nadal oznacza pusty wynik, czy coś innego?):




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę rozszerzyć to zapytanie SQL, aby znaleźć k najbliższych sąsiadów?

  2. Folder pętli SSIS Foreach jako zmienna

  3. sql z geografii do dbgeografii?

  4. Samozamykające się znaczniki w XML w SQL Server

  5. Jak emulować wyzwalacz BEFORE DELETE w SQL Server 2005?