SQL Serverに「インクルードファイル」の概念はありますか?


19

特定の順序で実行する必要がある一連のスクリプトがあります。他のすべてのファイルとそれらの正しい順序をリストする「マスターファイル」を作成したいと思います。基本的に、C ++またはASP / VBScriptのインクルードファイルに似ています。

回答:


19

使用している場合はSQLCMDを、あなたは使用することができます:r FileName別の.sqlファイルを含めること。

:r FileName

FileNameで指定されたファイルからステートメントキャッシュに追加のT-SQLステートメントとSQLCMDコマンドを解析します。FileNameは、Visual Studioのスタートアップディレクトリに関連して読み取られます。ファイルは、バッチターミネータが検出された後に読み取られて実行されます。複数の:rコマンドを発行できます。このファイルには、[ツール]、[オプション]で定義されているバッチターミネーターを含む、SQLCMDコマンドを含めることができます。展開前または展開後のスクリプトで:rを使用して、他のスクリプトを含めることができます。


自分でこの機能を使用していますか?
bernd_k

SQL Server Data Toolsプロジェクトで頻繁に使用しています。ポストスクリプトとして実行されるサンプルデータを整理しようとすると、本当に役立ちます。
ジョナサンアレン

4

古代のCプリプロセッサの意味では間違いなく

  • T-SQL自体にはそのような概念はありません
  • SSMSのsqlcmdおよびsqlcmdmodeは相対ファイルパスを処理しません
  • SSMSのsqlcmdおよびsqlcmdmodeは条件付きインクルードをサポートしていません

絶対パスを指定した一連のファイルを無条件の順序で含める場合は、コマンドラインツールsqlcmdを使用するか、@ mfredricksonおよび@Marianで言及されているsqlcmdmodeでSSMSを使用できます。


ただし、相対パスまたは条件付きインクルードが必要な場合は、sqlcmd(または非推奨の先行バージョンであるisqlまたはosqlのいずれか)を呼び出すラッパーを使用する必要があります。

現在、この状況での私の仕事では、古いvbsとhtaコードを確認して拡張しています。私は完全に幸せではありませんが、実際的な決定です。動作しており、エンドユーザーはhta GUIを使用して自宅にいるため、追加のソフトウェアをインストールする必要はありません。

新鮮なデザインのために、WPFとPowerShellを使用してsqlcmdの呼び出しをラップすることを考え始めましたが、現在の顧客では、PowerShell V2の存在を推測することはできません。

以前にも、この目的のために単純なcmdバッチを作成しましたが、そのうちのいくつかはまだ使用中です。

現在のツール、特にワークフローを対象とするツールがあり、ここで適していると思います。私はそれらに精通していません。


3

Management StudioのSQLCMDモードと共に、バッチファイルを使用してマスターファイルとして使用し、SQLCMDユーティリティを使用してすべてのsqlファイルを配置および呼び出すこともできます

SQLCMDモードは、Management Studio内のユーティリティ使用のシミュレーションであるため、モード間に大きな違いはありません。いつかバッチを実行することを好みます(M Studioを開く必要はありません...正しいデータベースをロードする...など)。出力ファイルを含め、バッチ内のすべてを構成することを好みます。


2

T-SQLプリプロセッサが非常に必要です。私はC#で独自のものを開発しましたが、1時間ほどかかりました。SQLスクリプトの実行順序を制御することに加えて、スカラーUDFのように見えるマクロを使用するのに便利ですが、インラインUDFと同じくらい高速に実行できます。


+1-テンプレートツールを使用して、このようなことを何度も行ってきました。sqlcmdには変数置換のための機能がいくつかありますが、SSMSに適切なマクロプリプロセッサプラグインを実装した人には、一番下に大きなキスをします。
ConcernedOfTunbridgeWells

1
@AK、これについてもう少し詳しく説明してもらえますか?おそらくgithubにコードを投稿しますか?
クレイグ14

2

bernd_kの答えが好きです。SQL Server 2008以降を実行している場合は、番号を含めるなど、スクリプトの命名方法に応じて、SQL Server PowerShell(SQLPS)を使用できます。その後、SQL 2005を使用している場合でも、PowerShellと2005のSMOを利用できます。

サイドノート:私は、SQLCMDは最終的に減価償却リストに入れられ、SQLPS、PowerShellに置き換えられると信じています。

他にもいくつかのオプションがあります。

  1. SQL Agentジョブのステップとして各スクリプトをセットアップします。それらが実行される順序を設定できます。
  2. 各ファイルを呼び出すSSISパッケージを作成します。これにより、もう少し制御しやすくなり、ロギングオプションが少し増えます。あるスクリプトの結果を次のスクリプトを実行する前に検証する必要がある場合、この方法が気に入っています。

SQLCMDは、SQL ServerデータツールとDACPACがどのように機能するかにとって非常に重要であるため、減価するとは思わない。
ジョナサンアレン

@JonathanAllenを使用SQLCMDしてDACPACを管理することを示す現在のドキュメントを見つけた場合、私が見つけることのほとんどはPowerShellを参照しているためです。またsqlcmd、スキーマの比較を除き、SSDTで使用される参照は表示されませんが、生成されたスクリプトは使用しません。
ショーンメルトン

SSDTスクリプトはsqlcmdスクリプトです。これが、ユーザー定義とデータベース名などのパラメーターの処理方法です。SqlPackage.exeを使用してDACPACを展開する場合、このリンクはsqlcmdパラメーターを渡す方法を示しています。msdn.microsoft.com/en-us/...
ジョナサン・アレン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.