4

いくつかのステージング テーブルで動作する多くのアクション クエリを含む .sql スクリプトがあります。このスクリプトは、間に他のコマンドを入れて 2 回実行する必要があります。

  1. ソース A からステージング テーブルを読み込む
  2. do_stuff.sql加工して使う
  3. 結果をどこかに移動します。
  4. ソース B に対して手順 1 ~ 3 を繰り返します。

ブルート フォース アプローチは、必要に応じて dostuff.sql をコピー & ペーストすることです。これは技術的には機能しますが、より良い方法はありますか?

RunThisSQL 'C:\do_stuff.sql'私がまだ発見していないようなコマンドがあることを願っています。

アップデート

さて、約 5 年が経ちましたが、この古い質問を再発見しました。私は最近これを行い、マスターテーブルをループするカーソルを作成しました。そのマスター テーブルの各レコードに対して、スクリプトは、マスター テーブルによって設定された変数を使用して内部スクリプトを実行します。

https://www.mssqltips.com/sqlservertip/1599/sql-server-cursor-example/

4

4 に答える 4

2

xp_cmdshell を使用してみてください。

 EXEC xp_cmdshell  'sqlcmd -S ' + @ServerName + ' -d ' + @DBName + ' -i ' +@FileName
于 2013-05-22T06:41:30.387 に答える
2

Visual Studio を使用している場合は、「Sql Server Database」プロジェクトを作成できます。プロジェクトを使用すると、*.sql ファイルを実行できるスクリプトを作成できます。

 /*
Post-Deployment Script Template                         
--------------------------------------------------------------------------------------
 This file contains SQL statements that will be appended to the build script.       
 Use SQLCMD syntax to include a file in the post-deployment script.         
 Example:      :r .\myfile.sql                              
 Use SQLCMD syntax to reference a variable in the post-deployment script.       
 Example:      :setvar TableName MyTable                            
               SELECT * FROM [$(TableName)]                 
--------------------------------------------------------------------------------------
*/

も参照してください。http://candordeveloper.com/2013/01/08/creating-a-sql-server-database-project-in-visual-studio-2012/

于 2013-05-21T18:34:21.187 に答える
1

xp_cmdshell と連結はうまく連携せず、「'+' 付近の構文が正しくありません」というエラーが発生することがよくあります。したがって、上記のJeoticsソリューションに加えて、xp_cmdshell に渡す文字列全体の変数を作成する必要があります (スペースを含む可能性のあるもの (例: ファイルパス\ファイル名) を囲む引用符を含む)。これは、xp_cmdshell の Microsoft ドキュメントで言及されています。ここで説明するように xp_cmdshell が無効になっている SQL Server のデフォルト設定と、ここで説明する xp_cmdshell を使用する権限をシステム管理者以外に付与するという問題に対処する必要があります。. ドキュメントでは、xp_cmdshell は悪意のある人のための手段であるため、多くの人に xp_cmdshell 権限を与えないように一般的にアドバイスしていますが、私のように、最小限の信頼できるデータベース ユーザーがいる場合は、合理的な解決策のように思えます。正しい構成が必要な最後の問題は、ここで概説されている SQL Server エージェントです。ドキュメントでは、SQL エージェントがバックグラウンド スケジューリング (バックアップなど) やコマンド ライン ステートメントのパフォーマンスなどを担当することを概説しています。

DECLARE
    @Server nvarchar (50)
    ,@Database nvarchar(50)
    ,@File nvarchar(100)
    ,@cmd nvarchar(300);

SET @Server = server_name;
SET @Database = database_name;
SET @File = 'C:\your file path with spaces';
SET @cmd = 'sqlcmd -S ' + @Server + ' -d ' + @Database + ' i "' + @File + '"';

EXEC xp_cmdshell @cmd;
于 2018-08-31T03:51:54.153 に答える