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_nameosv. - 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/ENDoch 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) affectedmeddelanden från att störa dina resultat. NVARCHARparametrar bör ha ett N-prefix (även om jag är förvirrad varför du växlar mellanvarcharochnchari 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
COLLATEklausul.
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?):
