从表的列中获取所有记录,并在sql server .net中以CSV格式导出到表的其他列

时间:2013-05-31 05:24:45

标签: sql sql-server sql-server-2008-r2

我要为以下要求创建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性能问题而实现这个目标的其他替代方法?

请尽快启发。

提前谢谢!!

2 个答案:

答案 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