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_name
atd. - 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
/END
a nebojte se použít odsazení, aby byl mnohem čitelnější. - Obvykle budete chtít použít
SET NOCOUNT ON;
abyste zabránilin row(s) affected
zprávy od zasahování do vašich výsledků. NVARCHAR
parametry by měly mít předponu N (i když jsem zmatený, proč střídáte mezivarchar
anchar
na 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í
COLLATE
dolož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?):