方法 : スクリプトからデータベース オブジェクトをインポートする
既存のデータベースからデータベース スキーマをインポートできるだけでなく、既存のスクリプトからデータベース オブジェクトをインポートすることもできます。この方法を使用すると、他のサード パーティ製ツールを使用して作成された既存のデータベース定義を取得して、データベース プロジェクトにインポートできます。指定したスクリプトが解析され、データベース オブジェクトを作成するステートメントが識別された後、データベース プロジェクトにインポートされます。
オブジェクトの定義にエラーが含まれている場合、そのオブジェクトはスキップされます。このエラーが種類の定義に関するエラーである場合、ステートメントがデータベース プロジェクト内の ScriptsIgnoredOnImport.sql ファイルに格納されます。オブジェクトの種類は有効であるがオブジェクトの定義にエラーがある場合 (存在しないテーブルを参照するビューなど)、[エラー一覧] ウィンドウにエラー メッセージが表示されます。
スクリプトからデータベース オブジェクト定義をインポートするには
スクリプトからデータベース オブジェクト定義をインポートするには
[プロジェクト] メニューの [スクリプトのインポート] をクリックします。
SQL スクリプト ファイルのインポート ウィザードが表示されます。
メモ : ソリューション エクスプローラまたはスキーマ ビューでデータベース プロジェクトを右クリックし、[スクリプトのインポート] をクリックすることもできます。
[次へ] をクリックし、ウィザードの導入ページを読んだ後、[ファイルの選択] ページに進みます。
[ファイル名] ボックスに、インポートするスクリプトのパスを含むファイル名を入力します。また、[参照] をクリックしてファイルを見つけることもできます。
インポートしたオブジェクトでデータベース プロジェクト内の同じ名前と種類のオブジェクトを置き換える場合は、[プロジェクトに既に存在するオブジェクトを上書き] チェック ボックスをオンにします。
[エンコード] から、スクリプト ファイルの作成に使用したエンコードをクリックします。
[完了] をクリックし、指定したスクリプトからデータベース オブジェクト定義をインポートします。
スクリプトの解析時に進行状況ページが表示され、オブジェクト定義がデータベース プロジェクトに追加されます。スクリプトからデータベース定義をインポートすると、ログ ファイルが作成されます。ログ ファイルは、プロジェクト フォルダの Import Script Logs サブフォルダ内に格納されます。
メモ : ソース ファイルは変更されず、共有読み取り専用モードで開きます。
問題と制約
SQL スクリプト ファイルのインポート ウィザードにより、指定されたスクリプトがすべてのデータ定義言語 (DLL: Data Definition Language) の CREATE ステートメントに対して検索され、対応するオブジェクトがプロジェクトに追加されます。次の制約が適用されます。
認識されないステートメントは、データベース プロジェクト内の ScriptsIgnoredOnImport.sql ファイルに格納されます。
スクリプトには、単一データベース内のオブジェクトに対する定義が含まれているものと見なされます。すべてのオブジェクトが、現在のデータベース プロジェクトにインポートされます。複数のデータベースの定義がスクリプトに含まれている場合、CREATE DATABASE ステートメントと USE ステートメントは無視され、すべてのオブジェクトがデータベース プロジェクトに追加されます。複数のデータベース プロジェクトを作成する場合、ファイルを手動で分割して各データベースに 1 ファイルずつ割り当て、各ファイルをそれぞれのデータベース プロジェクトに個別にインポートする必要があります。複数のデータベース定義を持つスクリプトを単一のデータベース プロジェクトにインポートする場合、大量のエラーが発生する可能性があります。
ファイル グループを追加する ALTER DATABASE ステートメントも同時にインポートされます。スクリプトに CREATE ステートメントが記述されていて、このステートメントによって作成されたオブジェクトに対する DROP ステートメントがその後に続いている場合でも、このオブジェクトは削除されることなくインポートされます。
テーブルに対する制約の追加や、フルテキスト インデックス用の列の指定を行う ALTER TABLE ステートメントだけがインポートされます。制約については、単一の制約を追加するステートメントだけが認識されます。複数の制約を追加するステートメントはスキップされます。
バッチ処理は、GO ステートメントで分割する必要があります。
メモ : スクリプトの実行結果をインポートするには、スクリプトに記述されている CREATE ステートメントを使用するのではなく、スクリプトを実行してデータベースを作成し、[データベース スキーマのインポート] を使用してスクリプト実行後のデータベースをインポートします。