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 forhindren 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 mellemvarchar
ognchar
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?):