0

以下の要件のためにSprocを作成する必要があります....

私は2つのテーブルを持っています:

TableA の内容: ID (ID 列の主キー)

TableB の内容: RandomID (この列には、 NEWID() を使用してテーブル A の「ID」をランダムに並べ替えた後に生成される ID が格納されます)

さて、私の要件は、「TableA」からのすべての「ID」をランダムにソートした後、IDをTableBの「RandomID」列に格納する必要があることです。つまり、ランダム番号を生成している場合

"select ID from TableA order by NewID()"

上記のクエリの出力:

3 2 4 5 2 . . . 19

*次に、上記の出力を別の列、つまり TableB の「RandomID」に CSV 形式でエクスポートする方法は?? つまり、「TableB の RandomID 列」は次の形式で格納する必要があります。

3,2,4,5....,19

この要件にはカーソルを使用する必要がありますが、CURSORを宣言した後に他のテーブルにエクスポートし、要件に従って使用する方法、またはカーソルのパフォーマンスの問題のためにこの目標を達成するための他の代替手段はありますか??

早く教えてください。

前もって感謝します !!

4

2 に答える 2

0

最終的に Cursor を使用して解決策を得ましたが、

 declare @ids varchar(50),@qNameIdCSV varchar(max)=''
 declare RandomCursor cursor for select ID from TableA order by NEWID()
        open RandomCursor 
        fetch next from RandomCursor into @ids
        while @@FETCH_STATUS=0
        begin
        --print @ids
        set @qNameIdCSV=@qNameIdCSV+','+@ids
        fetch next from RandomCursor into @ids
        end
        close RandomCursor 
        deallocate RandomCursor 
        set @qNameIdCSV=SUBSTRING(@qNameIdCSV,2,len(@qNameIdCSV)-1) 

print @qNameIdCSV --check the required output
or 
insert into tableA (RandomID) values (@qNameIdCSV) -- this will save the random generated ID using NEWID() into the required column in CSV form
于 2013-05-31T10:25:42.090 に答える
0

複数の行になる選択をCSVの単一の列に変換する場合、これはうまくいくかもしれません:

DECLARE @CSVSTRING VARCHAR(MAX)
SET @CSVSTRING = ''
SELECT @CSVSTRING = @CSVSTRING + ID + ',' FROM TableA ORDER BY NEWID()

SELECT SUBSTRING(@CSVSTRING, 0, LEN(@CSVSTRING))

カーソルはいらない...

また、質問を解釈する別の方法はinsert、そのクエリの結果ごとに行を作成TableBし、次のようにすることです。

INSERT INTO TableB (RandomID)
SELECT ID FROM TableA ORDER BY NEWID()
于 2013-05-31T05:33:04.143 に答える