sql >> Databasteknik >  >> RDS >> Sqlserver

lagrad procedur med jokerteckenparametrar

Försökte du köra den igen? Jag misstänker att chefssamtalet är en del av din procedur nu. Vad sägs om:

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 massa andra förslag som jag inte skulle nämna:

  • Du bör alltid ange schemaprefixet när du skapar och anropar objekt. Så CREATE PROCEDURE dbo.wildcard_name , EXEC dbo.wildcard_name osv.
  • Förhoppningsvis använder inte din produktionskod SELECT * .
  • Rekommenderar starkt att du använder nvarchar istället för nchar för din parameter.
  • Slå in procedurtexten med BEGIN / END och var inte rädd för att använda indrag för att göra det mycket mer läsbart.
  • Du vill vanligtvis använda SET NOCOUNT ON; för att förhindra att n row(s) affected meddelanden från att störa dina resultat.
  • NVARCHAR parametrar bör ha ett N-prefix (även om jag är förvirrad varför du växlar mellan varchar och nchar i första hand - det här är två skift där jag förväntar mig noll).
  • Beroende på sorteringen (och om du vill att sökningen ska vara skiftlägeskänslig) kan du behöva ändra din where-sats med COLLATE klausul.

REDIGERA det här verkar fungera bra för mig, så förklara gärna vad du gör annorlunda (och betyder "fungerade inte" fortfarande tomt resultat, eller något annat?):




  1. uppdatera poster med förberedda uttalanden, kontrollera om uppdateringen fungerade

  2. Mappning av PostgreSQL seriell typ med Hibernate-kommentarer

  3. Returnera bara de numeriska värdena från en PostgreSQL-databaskolumn

  4. skillnaden mellan förklara plan och genomförandeplan