2

テーブル内のいくつかの列を更新し、それらの列を選択して実行するレポート用に保存できるようにするストアド プロシージャがあります。現在、「クエリ オプション」の列サイズを 333 に設定し、他のすべてのオプションをオフにして、結果をテキストにしてから、ファイルを名前と形式で保存することで、エクスポートと保存を手動で行っています。ただし、エクスポートと保存のプロセスを介してこれを自動化する方法が必要であることはわかっています。

Vb スクリプトでジョブを使用することを検討しましたが、これはスケジュールではなくオンデマンドで実行される単純なレポートです。そのため、仕事はやり過ぎのように見えました。私が見つけたもう 1 つのオプションは BCP で、これは私が必要としているもののようです。ただし、これは CMD ツールとしてしか知らず、SQL クエリ内でこれを活用する方法がよくわかりません。必要な場合に備えて、ストアド プロシージャの実行例を次に示します。どんな助けでも大歓迎です、そして前もって感謝します。SQL 2008 R2 を使用しています。

 UPDATE Table#1 SET Column1 = '' WHERE Column1 = 'XX'

UPDATE Table#1 SET Column2 = '' WHERE Column2 = '000000'



 SELECT   Column1 + 
          Column2 + 
          Column3  
 FROM Table#1 Where Column4 = 'T'
4

1 に答える 1

3

BCP はコマンド ライン ユーティリティですが、XP コマンド シェルを使用して SQL 経由でアクセスできるため、xp_cmdshell を有効にする必要があります。以下は、SQL 内でこれを呼び出す方法のパラメーター化された例です。

DECLARE @Server varchar(50) = 'ServerName' /* Source SQL Server */
DECLARE @FileName varchar(50) = ''
DECLARE @SourceProc varchar(50) = ''
DECLARE @sql varchar(8000)
DECLARE @RunDate varchar(10) = REPLACE(CONVERT(date, getdate()), '-','')
DECLARE @FilePath as varchar(255) = '\\UNCPathtoOutputFile\'
DECLARE @StartDate as Date = (select dateadd(month,datediff(month,0,GETDATE())-2,0))--'1/1/2013' /* Example of required Date as parameter */
DECLARE @EndDate as Date = (SELECT dateadd(month,datediff(month,0,GETDATE())-0,-1))--'2/1/2013' /* Example of required Date as parameter */
--  BCP Export
    SET @SourceProc = '[Schema].[StoredProcName]'
    SET @FileName = 'SomeOutputFile' + @RunDate + '.txt'
    SET @FilePath = @FilePath + @FileName
    SET @sql = 'bcp "EXEC [Database].' + @SourceProc + ' ''' + CONVERT(varchar(10),@StartDate, 101) + ''',''' + CONVERT(varchar(10),@EndDate, 101) + '''" QUERYOUT "' + @FilePath + '" -c -t"|" -r\n -S' + @Server + ' -T'

    --PRINT(@SQL)
    exec master.dbo.xp_cmdshell @sql
于 2015-07-15T17:58:33.037 に答える