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 attn 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 mellanvarchar
ochnchar
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?):