我要为以下要求创建Sproc ....
我有两张桌子:
TableA包含:ID(标识列主键)
TableB包含:RandomID(此列将存储使用NEWID()随机排序表A“ID”后生成的ID)
现在,我的要求是从“TableA”中随机排序所有“ID”后,Id必须存储在TableB的“RandomID”列中 它的意思是 : 如果我正在生成随机数,即
"select ID from TableA order by NewID()"
以上查询的输出为:
3 2 4 五 2 。 。 。 19
*然后,如何将上述输出导出到其他列,即表格的“RandomID”,以CSV格式?即 “TableB的RandomID列”必须以
的形式存储... 3,2,4,5,19
我要使用游标来满足这个要求,但是在声明CURSOR并根据我的要求使用之后如何将它导出到其他表,或者是因为Cursor性能问题而实现这个目标的其他替代方法?
请尽快启发。
提前谢谢!!
答案 0 :(得分: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()
答案 1 :(得分: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