Czy próbowałeś go uruchomić ponownie? Podejrzewam, że wezwanie do dyrektora jest teraz częścią twojej procedury. A co powiesz na:
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%';
Kilka innych sugestii, o których nie wypadałoby nie wspomnieć:
- Podczas tworzenia i wywoływania obiektów należy zawsze określić prefiks schematu. Więc
CREATE PROCEDURE dbo.wildcard_name,EXEC dbo.wildcard_nameitp. - Mam nadzieję, że Twój kod produkcyjny nie używa
SELECT *. - Gorąco polecam używanie nvarchar zamiast nchar dla swojego parametru.
- Owiń treść procedury za pomocą
BEGIN/ENDi nie bój się używać wcięć, aby uczynić go bardziej czytelnym. - Zazwyczaj będziesz chciał użyć
SET NOCOUNT ON;aby zapobiec wpływowin row(s) affectedwiadomości od zakłócania wyników. NVARCHARparametry powinny mieć przedrostek N (chociaż jestem zdezorientowany, dlaczego naprzemiennie używaszvarcharincharpo pierwsze - są to dwie zmiany, w których spodziewałbym się zera).- W zależności od sortowania (i tego, czy wyszukiwanie ma uwzględniać wielkość liter), może być konieczna zmiana klauzuli where za pomocą
COLLATEklauzula.
EDYTUJ wydaje mi się, że to działa dobrze, więc proszę wyjaśnij, co robisz inaczej (i czy „nie działa” nadal oznacza pusty wynik, czy coś innego?):
