1

我有一个业务需求,需要一个包含列的表PrimaryKey, A, B, C, D, E并将每个列转储到一个文件中,例如:

filename:  Primarykey.txt
(row 1) A
(row 2) B
(row 3) C

等等

有没有使用 SQL Server 2008 执行此操作的好方法,或者我应该使用数据表编写 C# 程序?我正在使用的表中有大约 200k 行。

谢谢

4

2 回答 2

1

下面的链接包含一些以前的帖子和另一个使用 SSIS 的可能解决方案的链接。

你可能不得不玩,直到你得到你想要的。

祝你好运。

这里有一些线索

SQL Server 论坛 - 从 SSIS 创建多个文件

于 2013-07-18T13:19:47.267 回答
1

使用 xp_cmdshell

如果 xp_cmdshell 是允许的,你可能可以使用这样的东西:

declare @path varchar(200)
declare @schema varchar(100)
declare @pk varchar(100)
declare @sql varchar(2000)
declare @cmd varchar(2500)
set @path = 'C:\your\file\path\'
declare rowz cursor for (select PrimaryKey from TableA)
open rowz
fetch next from rowz into @pk
while @@FETCH_STATUS = 0
begin
    set @sql = 'select A, B, C, D, E from TableA where PrimaryKey = ''' + @pk + ''''
    set @cmd = 'bcp "' + @sql + '" queryout "' + @path + @pk + '.txt" -T -c -t\n'
    exec xp_cmdshell @cmd
    fetch next from rowz into @item
end
close rowz
deallocate rowz

使用 sqlcmd

或者,您可以创建一系列语句来运行sqlcmd以创建单独的文件。

首先,创建一个临时表并添加一些样板条目:

create table #temp (tkey int, things varchar(max))
insert into #temp (tkey, things) values (0, 'SET NOCOUNT ON;
GO'),(2, ':out stdout')

然后,用我们需要的查询填充临时表:

declare @dir varchar(250)
declare @sql varchar(5000)
declare @cmd varchar(5500)
declare @schema varchar(100)
declare @pk varchar(100)
set @schema = 'YourSchema'
declare rowz cursor for (select PrimaryKey from "YourSchema"..TableA)
open rowz
fetch next from rowz into @pk
while @@FETCH_STATUS = 0
begin
    set @dir = '"C:\your\file\path\'+@pk+'.txt"'
    set @sql = '
SELECT A +''
''+ B +''
''+ C +''
''+ D +''
''+ E
FROM "'+@schema+'"..TableA where PrimaryKey = '+@pk
    set @cmd = ':out '+@dir+@sql+'
GO'
    insert into #temp (tkey,things) values (1, @cmd)
    fetch next from rowz into @pk
end
close rowz
deallocate rowz

接下来,查询临时表以获取生成的查询:

select things from #temp order by tkey

最后,将结果复制到一个文件中,并将该文件作为输入发送到sqlcmd.exe命令提示符下,并带有参数-h -1

C:\your\file\path>sqlcmd -h -1 -S YourServer -i "script.sql"
于 2016-03-19T18:44:52.110 回答