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/ENDen 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) affectedberichten uw resultaten niet kunnen verstoren. NVARCHARparameters moeten een N-voorvoegsel hebben (hoewel ik in de war ben waarom je afwisselt tussenvarcharenncharin 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
COLLATEclausule.
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?):
