2011-04-11 106 views

回答

3

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

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

3

这工作,但它是一个有点神秘。调整到您的查询。基本上你会创建命令行回显行,通过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 @[email protected]+1; 
end 
1

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

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

+0

我正在使用循环函数更新SQL中的记录以获取最高数字ID并在将其设置为我正在更新的记录的ID之前向其中添加1。这是从两个系统合并到一个系统的信息。当我这样做时,我想知道ID之前是什么,然后是什么,所以如果发生任何事情,我可以退出它或撤消更新。这不是应该在SQL中完成的事情吗? – rud3y 2017-04-20 13:24:13

0

我在这个问题上有问题,所以我想提议我做了什么。 我声明了选择结果的光标,然后我将它们写入文件。例如:

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