もう一度実行してみましたか? exec 呼び出しは、現在、プロシージャの本体の一部であると思われます。どうですか:
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%';
言及しないでおくべきその他の提案の束:
- オブジェクトを作成して呼び出すときは、常にスキーマ プレフィックスを指定する必要があります。だから
CREATE PROCEDURE dbo.wildcard_name
,EXEC dbo.wildcard_name
など - 製品コードで
SELECT *
を使用しないことを願っています . - パラメータには nchar ではなく nvarchar を使用することを強くお勧めします。
- 手続き本体を
BEGIN
で囲みます /END
読みやすくするためにインデントを使用することを恐れないでください。 - 通常は
SET NOCOUNT ON;
を使用します。n row(s) affected
を防ぐ メッセージが結果に干渉しないようにします。 NVARCHAR
パラメーターには N プレフィックスが必要です (ただし、varchar
を交互に使用する理由がわかりません およびnchar
そもそも - これは 2 シフトであり、私は 0 を期待しています)。- 照合 (および検索で大文字と小文字を区別するかどうか) によっては、
COLLATE
を使用して where 句を変更する必要がある場合があります。 句。
編集 これは私にとっては問題なく機能しているように見えるので、別の方法で行っていることを説明してください (「機能しなかった」というのは、結果が空であることを意味しますか?):