Heb je het nog een keer geprobeerd? Ik vermoed dat de exec-oproep nu deel uitmaakt van de hoofdtekst van uw procedure. Wat dacht je van:
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%';
Een heleboel andere suggesties die ik niet zou noemen:
- Je moet altijd het schemavoorvoegsel opgeven bij het maken en aanroepen van objecten. Dus
CREATE PROCEDURE dbo.wildcard_name
,EXEC dbo.wildcard_name
, enz. - Hopelijk gebruikt uw productiecode geen
SELECT *
. - Beveel ten zeerste aan om nvarchar te gebruiken in plaats van nchar voor je parameter.
- Wikkel uw proceduretekst in met
BEGIN
/END
en wees niet bang om inspringen te gebruiken om het veel leesbaarder te maken. - Meestal wil je
SET NOCOUNT ON;
. gebruiken om te voorkomen datn row(s) affected
berichten uw resultaten niet kunnen verstoren. NVARCHAR
parameters moeten een N-voorvoegsel hebben (hoewel ik in de war ben waarom je afwisselt tussenvarchar
ennchar
in de eerste plaats - dit zijn twee ploegen waar ik nul zou verwachten).- Afhankelijk van de sortering (en of u wilt dat de zoekopdracht hoofdlettergevoelig is), moet u mogelijk uw where-clausule wijzigen met de
COLLATE
clausule.
BEWERKEN dit lijkt prima te werken voor mij, dus leg alsjeblieft uit wat je anders doet (en betekent "werkte niet" nog steeds een leeg resultaat, of iets anders?):