Zkusil jsi to spustit znovu? Mám podezření, že volání exec je nyní součástí vaší procedury. Co třeba:
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%';
Spoustu dalších návrhů, o kterých by bylo lhostejné je nezmínit:
- Při vytváření a volání objektů byste měli vždy zadat předponu schématu. Takže
CREATE PROCEDURE dbo.wildcard_name,EXEC dbo.wildcard_nameatd. - Doufejme, že váš produkční kód nepoužívá
SELECT *. - Důrazně doporučujeme pro váš parametr použít nvarchar místo nchar.
- Zabalte tělo procedury pomocí
BEGIN/ENDa nebojte se použít odsazení, aby byl mnohem čitelnější. - Obvykle budete chtít použít
SET NOCOUNT ON;abyste zabránilin row(s) affectedzprávy od zasahování do vašich výsledků. NVARCHARparametry by měly mít předponu N (i když jsem zmatený, proč střídáte mezivarcharancharna prvním místě – to jsou dvě směny, kde bych očekával nulu).- V závislosti na řazení (a na tom, zda chcete, aby vyhledávání rozlišovalo malá a velká písmena), možná budete muset změnit klauzuli where pomocí
COLLATEdoložka.
UPRAVIT Zdá se, že to pro mě funguje dobře, tak prosím vysvětlete, co děláte jinak (a znamená „nefungovalo“ stále prázdný výsledek, nebo něco jiného?):
