sql >> Database teknologi >  >> RDS >> Sqlserver

gemt procedure med wildcard-parametre

Har du prøvet at køre det igen? Jeg formoder, at lederopkaldet er en del af din procedure nu. Hvad med:

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

En masse andre forslag, jeg ville undlade at nævne:

  • Du bør altid angive skemapræfikset, når du opretter og kalder objekter. Så CREATE PROCEDURE dbo.wildcard_name , EXEC dbo.wildcard_name osv.
  • Forhåbentlig bruger din produktionskode ikke SELECT * .
  • Anbefaler på det varmeste at bruge nvarchar i stedet for nchar til din parameter.
  • Indpak din proceduretekst med BEGIN / END og vær ikke bange for at bruge indrykning for at gøre det meget mere læsbart.
  • Du vil normalt bruge SET NOCOUNT ON; for at forhindre n row(s) affected beskeder fra at forstyrre dine resultater.
  • NVARCHAR parametre skal have et N-præfiks (selvom jeg er forvirret over, hvorfor du skifter mellem varchar og nchar for det første - det er to skift, hvor jeg ville forvente nul).
  • Afhængigt af sorteringen (og om du ønsker, at søgningen skal skelne mellem store og små bogstaver), skal du muligvis ændre din where-sætning ved hjælp af COLLATE klausul.

REDIGER det ser ud til at fungere fint for mig, så forklar venligst hvad du gør anderledes (og betyder "virkede ikke" stadig tomt resultat eller noget andet?):




  1. mysql vælg opdatering

  2. mysqli auto-inkrementerede primære id, der blev genereret

  3. Flere tabeller med et til mange forhold (Laravel)

  4. SQL:Hent produkter fra en kategori, men skal også være i et andet sæt kategorier