如何使用T-SQL,变量值和查询结果写入文本文件,我想实际上继续追加。
答案 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