2016-07-26 14 views
0

SQL Serverを使用していて、5000行のクエリを実行しました。私は、各行を別々のテキストファイルとして保存する必要があります。それを行う方法はありますか?結果の各行をSQL​​ Serverの別のテキストファイルに選択する方法

+0

CURSOR内から実行してください。しかし、ここでの質問はなぜですか?それはたくさんのファイルです。 –

+0

私はその中にデータとして完全なxmlを持っていて、各行をテキストファイルとして持つビジネス要件がありました – HadoopAddict

答えて

0

あなたはむしろTSQLで行います。さて、私はストアドプロシージャのクレジットを取ることはできません、それはしばらく前から持ち上げられました。

あなたは必須あなたが適切な権限

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

2を持って提供する)ステップ3で

1を最初のクエリとDESTINATIONを変更する必要があります)ストアドプロシージャを作成します。 - データベース名を提供する必要があります

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)次に方法が常にある

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; 
関連する問題