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

1 つの SQL パラメーターに複数の値を渡す

    いくつかの方法があります。次の例のように、パラメーターを XML BLOB として渡すことができます:

    CREATE PROCEDURE [dbo].[uspGetCustomersXML]
        @CustomerIDs XML
    AS
    BEGIN
    SELECT c.ID, c.Name
    FROM [dbo].[Customer] c
    JOIN @CustomerIDs.nodes('IDList/ID') AS x(Item) ON c.ID = Item.value('.', 'int' )
    END
    GO
    
    --Example Use:
    EXECUTE [dbo].[uspGetCustomersXML] '<IDList><ID>1</ID><ID>10</ID><ID>100</ID></IDList>'
    

    または、値を CSV として渡し、分割関数を使用して値をテーブル変数に分割します (多くの分割関数があり、クイック検索で 1 つが表示されます)。

    CREATE PROCEDURE [dbo].[uspGetCustomersCSV]
        @CustomerIDs VARCHAR(8000)
    AS
    BEGIN
    SELECT c.Id, c.Name
    FROM [dbo].[Customer] c
    JOIN dbo.fnSplit(@CustomerIDs, ',') t ON c.Id = t.item
    END
    GO
    
    --Example Use:
    EXECUTE [dbo].[uspGetCustomersCSV] '1,10,100'
    

    SQL 2008 以降を使用している場合は、TABLE 変数をパラメーターとして渡すことができるテーブル値パラメーターを使用できます。 ブログを書いた しばらく前にこれら 3 つのアプローチについて説明し、パフォーマンスを簡単に比較します。



    1. PHPでMysqlに接続するためのSSL自己署名証明書

    2. 別の列でグループ化された別の列の最大値に基づいて値を取得します

    3. 2 つの列に基づいて SQL の一意の制約を作成するにはどうすればよいですか?

    4. ユーザーストアドプロシージャの命名を避けるSP%またはSP_%