以下に例を示します。
数値 (1,5,8,36) のリストがあり、これらの値を (一時) テーブルの行として使用したい。方法の1つは次のとおりです
select 1 as n into ##temp
union
select 5 as n
union
select 8 as n
union
select 36 as n
問題は、番号リストが動的であることです。任意の値を持つことができます。したがって、これらの値を一時テーブルの行に変換する適切な体系的な方法が必要です。
以下に例を示します。
数値 (1,5,8,36) のリストがあり、これらの値を (一時) テーブルの行として使用したい。方法の1つは次のとおりです
select 1 as n into ##temp
union
select 5 as n
union
select 8 as n
union
select 36 as n
問題は、番号リストが動的であることです。任意の値を持つことができます。したがって、これらの値を一時テーブルの行に変換する適切な体系的な方法が必要です。
私がよく使う解決策...
数値のリストをVARCHAR(MAX)
コンマ区切りの文字列として指定し、dbo.fn_split()
オンラインで書かれた多くの関数の 1 つを使用します。
オンライン の多くの例の1つ... SQL-User-Defined-Function-to-Parse-a-Delimited-Str
これらの関数は文字列をパラメーターとして取り、テーブルを返します。
次に、次のようなことができます...
INSERT INTO @temp SELECT * FROM dbo.split(@myList)
SELECT
*
FROM
myTable
INNER JOIN
dbo.split(@myList) AS list
ON list.id = myTable.id
別の方法は、テーブル値パラメーターを調べることです。これらを使用すると、テーブル全体をパラメーターとしてストアド プロシージャに渡すことができます。使用しているフレームワークによって異なります。.NET、Java、Ruby などを使用しており、データベースとどのように通信していますか?
アプリケーション コードの詳細がわかったら、テーブル値パラメーターを使用するためのクライアント コードと SQL ストアド プロシージャ テンプレートの両方を示すことができます。
以下のクエリを使用して、1 から 9 までの 100 個のランダムな値を選択できます
Declare @Index Int = 1
Declare @Result Table (Col Int)
While @Index <= 100 Begin
Insert Into @Result (Col)
Select FLOOR( RAND() * 10)
Set @Index = @Index + 1
End
Select * From @Result