Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:如何将每行转储/提取到单独的文件_Sql_Sql Server - Fatal编程技术网

SQL Server:如何将每行转储/提取到单独的文件

SQL Server:如何将每行转储/提取到单独的文件,sql,sql-server,Sql,Sql Server,我有一个业务需求,需要获取一个包含列PrimaryKey、a、B、C、D、E的表,并将每个列转储到一个文件中,例如: filename: Primarykey.txt (row 1) A (row 2) B (row 3) C 等等 使用SQLServer2008有没有一个好方法来实现这一点,或者我应该使用datatable编写一个C#程序?我正在使用的表中有大约20万行 谢谢下面的链接包含一些以前的文章和另一个指向可能使用SSIS的解决方案的链接 你可能得到处玩,直到你得到你想要的 祝你好

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

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

使用SQLServer2008有没有一个好方法来实现这一点,或者我应该使用datatable编写一个C#程序?我正在使用的表中有大约20万行


谢谢

下面的链接包含一些以前的文章和另一个指向可能使用SSIS的解决方案的链接

你可能得到处玩,直到你得到你想要的

祝你好运

使用xp\u 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”

[link]可能是一个更好的解决方案,这里还介绍了写入文件,我目前没有安装SSI。我有SQL 2012开发版,但我总是可以得到它。现在我在想,我可以用C#更快/更好地实现这一点,但这是一个学习SSIS的非常好的项目(我对此一无所知)。谢谢大家的评论。