5

以下に例を示します。

数値 (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

問題は、番号リストが動的であることです。任意の値を持つことができます。したがって、これらの値を一時テーブルの行に変換する適切な体系的な方法が必要です。

4

4 に答える 4

6

私がよく使う解決策...

数値のリストを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 ストアド プロシージャ テンプレートの両方を示すことができます。

于 2012-05-16T08:33:18.990 に答える
1

以下のクエリを使用して、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
于 2012-05-21T22:59:46.760 に答える