如何在SQL Server中将结果中的每一行选择为另一个文本文件

时间:2016-07-26 20:51:41

标签: sql-server ssms

我正在使用sql server,我运行了一个导致5000行的查询。我希望每行都保存为单独的文本文件。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

使用SSIS,我打算全部输入,但这里有一个网站,详细说明了截图。
https://coldlogics.wordpress.com/2011/04/09/using-ssis-to-dynamically-create-data-files-from-a-full-result-set/

答案 1 :(得分:0)

如果你宁愿在TSQL中这样做。现在,我不能把它归功于存储过程,它是从前一段时间开始的。

您必须在步骤3中修改初始查询和DESTINATION。

  

1)必要时,只要您拥有适当的权利

EXEC sp_configure 'show advanced options', 1
GO
EXEC sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
  

2)创建存储过程 - 必须提供YourDatabaseName

CREATE Procedure [dbo].[prc-Write-To-File] (@text as Varchar(Max), @Filename Varchar(200)) AS
Begin
    Declare @Object int,@rc int,@FileID Int

    EXEC @rc = sp_OACreate 'Scripting.FileSystemObject', @Object OUT
    EXEC @rc = sp_OAMethod @Object , 'OpenTextFile' , @FileID OUT , @Filename , 2 , 1
    Set @text = Replace(Replace(Replace(@text,'&','&'),'<' ,'<'),'>','>')
    EXEC @rc = sp_OAMethod @FileID , 'WriteLine' , Null , @text
    Exec @rc = [YourDatabaseName].dbo.sp_OADestroy @FileID
    Declare @Append bit
    Select @Append = 0
    If @rc <> 0
    Begin
        Exec @rc = [YourDatabaseName].dbo.sp_OAMethod @Object, 'SaveFile',null,@text ,@Filename,@Append
    End
    Exec @rc = [YourDatabaseName].dbo.sp_OADestroy @Object
End
  

3)然后从CURSOR中执行

Declare @ID int,@String varchar(max)
Declare @Cursor as Cursor;

Set @Cursor = Cursor For
Select top 5 OD_Nr,OD_Title from OD  --<< Your QUERY goes here  

Open @Cursor;
Fetch Next From @Cursor into @ID, @String;

While @@FETCH_STATUS = 0
Begin
 Print cast(@ID as VARCHAR (50)) + ' ' + @String;
 Declare @Destination varchar(150) 
 Set @Destination = 'c:\working\test_' +cast(@ID as varchar(25))+'.txt'
 Exec [dbo].[prc-Write-To-File] @String,@Destination 
 Fetch Next From @Cursor Into @ID, @String;
End

Close @Cursor;
Deallocate @Cursor;