SQL Server-如何将变量和查询结果写入文本文件?

时间:2011-04-11 19:17:11

标签: sql-server tsql sql-server-2008

如何使用T-SQL,变量值和查询结果写入文本文件,我想实际上继续追加。

4 个答案:

答案 0 :(得分:3)

您可以使用SQL CLR将您想要的任何内容写入文件。你可以自己编写代码,也可以使用SQL#库(我是作者,它不是免费的 - 对于这个函数 - 但也不贵)并使用File_WriteFile函数来写出文本。它允许附加数据。该库对于大多数函数是免费的,但对于文件系统函数则不是。可以在http://www.SQLsharp.com/

找到它

如果你想尝试自己编码,我发现这个例子是我认为你要求的基本概念:http://www.mssqltips.com/tip.asp?tip=1662

答案 1 :(得分:3)

这有效,但它有点神秘。调整您的查询。基本上你要创建命令shell echo行,以便通过xp_cmdshell执行并循环遍历它们。

declare @cmd varchar(500), @minid int, @maxid int;
declare @output table(
    id int identity(1,1) primary key,
    echo varchar(500) not null
    )
set @cmd = 'select top 10 ''ECHO ''+name+'' >> C:\test.txt'' from master.dbo.sysobjects'


insert into @output(echo)
exec(@cmd)

select @minid=Min(ID),@maxid=Max(ID) from @output

while @minid <= @maxid
begin
    select @cmd = echo from @output where id = @minid;
    exec xp_cmdshell @cmd;
    set @minid=@minid+1;
end 

答案 2 :(得分:1)

启用和使用xp_cmdshell会使您的实例面临额外的安全风险。使用CLR更安全,但也不建议用于此目的。这两个选项只会使糟糕的设计决策变得更糟。

为什么要尝试从T-SQL写入文件?抵制将SQL Server转变为脚本平台的冲动。使用SSIS,PowerShell或C#等应用程序语言与SQL Server进行交互,并根据需要将输出写入日志文件。

答案 3 :(得分:0)

我在这个问题上遇到了问题,所以我想提出我的建议。 我为Select结果声明了一个Cursor,然后我将它们写入文件。例如:

 DECLARE @cmd NVARCHAR(400)
 DECLARE @var AS NVARCHAR(50) 
         ,@Count = (SELECT COUNT(*) FROM Students) 
DECLARE Select_Cursor CURSOR FOR 
SELECT name FROM Students OPEN Select_Cursor 
 FETCH NEXT FROM Select_Cursor INTO @var 
WHILE (@Count>0) 
 SET @cmd = 'echo ' + @var +' >> c:\output.txt' 
 EXEC master..xp_cmdshell @cmd 
SET @Count = @Count - 1 
FETCH NEXT FROM Select_Cursor INTO @var 
END
 CLOSE SelectCursor
 DEALLOCATE  SelectCursor