sql >> Databáze >  >> RDS >> Sqlserver

uložená procedura se zástupnými parametry

Zkusil jsi to spustit znovu? Mám podezření, že volání exec je nyní součástí vaší procedury. Co třeba:

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%';

Spoustu dalších návrhů, o kterých by bylo lhostejné je nezmínit:

  • Při vytváření a volání objektů byste měli vždy zadat předponu schématu. Takže CREATE PROCEDURE dbo.wildcard_name , EXEC dbo.wildcard_name atd.
  • Doufejme, že váš produkční kód nepoužívá SELECT * .
  • Důrazně doporučujeme pro váš parametr použít nvarchar místo nchar.
  • Zabalte tělo procedury pomocí BEGIN / END a nebojte se použít odsazení, aby byl mnohem čitelnější.
  • Obvykle budete chtít použít SET NOCOUNT ON; abyste zabránili n row(s) affected zprávy od zasahování do vašich výsledků.
  • NVARCHAR parametry by měly mít předponu N (i když jsem zmatený, proč střídáte mezi varchar a nchar na prvním místě – to jsou dvě směny, kde bych očekával nulu).
  • V závislosti na řazení (a na tom, zda chcete, aby vyhledávání rozlišovalo malá a velká písmena), možná budete muset změnit klauzuli where pomocí COLLATE doložka.

UPRAVIT Zdá se, že to pro mě funguje dobře, tak prosím vysvětlete, co děláte jinak (a znamená „nefungovalo“ stále prázdný výsledek, nebo něco jiného?):




  1. Dynamicky závislý rozevírací seznam s jquery-select2

  2. Pokus o přihlášení pomocí ověřování SQL se nezdařil

  3. Zobrazuje se chyba Chyba při převodu datového typu nvarchar na skutečný.

  4. Upozornění:mysql_fetch_array() očekává, že parametr 1 bude zdrojem [...]