¿Intentaste ejecutarlo de nuevo? Sospecho que la llamada ejecutiva es parte del cuerpo de su procedimiento ahora. ¿Qué tal:
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%';
Un montón de otras sugerencias que sería negligente no mencionar:
- Siempre debe especificar el prefijo del esquema al crear y llamar objetos. Así que
CREATE PROCEDURE dbo.wildcard_name
,EXEC dbo.wildcard_name
, etc. - Con suerte, su código de producción no usa
SELECT *
. - Recomiendo encarecidamente usar nvarchar en lugar de nchar para su parámetro.
- Envuelva el cuerpo de su procedimiento con
BEGIN
/END
y no tenga miedo de usar sangría para que sea mucho más legible. - Por lo general, querrá usar
SET NOCOUNT ON;
para evitar quen row(s) affected
mensajes de interferir con sus resultados. NVARCHAR
los parámetros deben tener un prefijo N (aunque estoy confundido por qué está alternando entrevarchar
ynchar
en primer lugar, son dos turnos en los que esperaría cero).- Dependiendo de la intercalación (y si desea que la búsqueda distinga entre mayúsculas y minúsculas), es posible que deba cambiar su cláusula where usando
COLLATE
cláusula.
EDITAR esto parece funcionar bien para mí, así que explique qué está haciendo de manera diferente (¿y "no funcionó" todavía significa un resultado vacío, o algo más?):