0

我必须为以下要求创建 Sproc....

我有两张桌子:

TableA 包含: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

*那么,如何将上述输出以CSV形式导出到TableB的“RandomID”的其他列?即“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 回答