sql >> データベース >  >> RDS >> Sqlserver

ワイルドカード パラメータを使用したスト​​アド プロシージャ

    もう一度実行してみましたか? 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 句を変更する必要がある場合があります。 句。

    編集 これは私にとっては問題なく機能しているように見えるので、別の方法で行っていることを説明してください (「機能しなかった」というのは、結果が空であることを意味しますか?):




    1. 階層IDを使用してすべてのリーフノードレコードを検索します

    2. SQL外部キー

    3. OracleはCLOBを暗号化/復号化します

    4. 2つの列の組み合わせに一意性制約を追加します