こんにちは私はSQLSERVER2008 R2を使用しています。誰かが、UIを使用せずに作成、変更などのスクリプトを生成するのを手伝ってくれませんか。
4 に答える
ストアドプロシージャ、ビュー、関数などは、sys.sql_modules
暗号化されていない限り、すべてスクリプト化できます。
SELECT definition
FROM sys.sql_modules
WHERE [object_id] = OBJECT_ID(N'dbo.object_name');
または、複数のスクリプトを作成する場合:
SELECT definition + CHAR(13) + CHAR(10) + 'GO'
FROM sys.sql_modules
WHERE OBJECT_NAME([object_id]) IN (N'name1', N'name2', ...);
またはすべて:
SELECT '--' + QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
+ '.' + QUOTENAME(OBJECT_NAME([object_id]))
+ CHAR(13) + CHAR(10) + definition
+ CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10)
FROM sys.sql_modules
WHERE definition IS NOT NULL;
(もちろん、これらはすべてManagement Studioで実行すると運命づけられ、出力文字列の最大長を超えると、テキストの結果は最大8Kになります。ただし、他の場所でこれらを使用したいようです。)
これは、オブジェクトの作成時に有効だったSET設定のスクリプトを作成しないことに注意してください。ただし、このクエリを拡張して、同じビューから取得できるANSI_NULLS
やQUOTED_IDENTIFIER
のような設定を含めることができます。
テーブルは少しトリッキーです。プロファイラーの実行中にSSMSでスクリプトを生成すると、多数のクエリを通じてこれが実行され、コード内にテーブルの作成スクリプトが作成されることがわかります(つまり、スクリプトをスニッフィングすることはできません)。テーブルに使用しているオプション、すべての外部キーと依存オブジェクトをスクリプト化する必要があるかどうかなどによっては、非常に複雑になる可能性があります。このため、podiluskaの回答で強調表示されているSMOメソッドをお勧めします。
すでにSSMSを使用している場合は、スクリプトの生成メニュー項目を使用しない目的がわかりません。シングルトンアプローチが問題である場合は、オブジェクトエクスプローラの代わりにオブジェクトエクスプローラの詳細を使用して、複数のオブジェクトに対してこれを行うことができます。
Scripter
これを行うには、SQL 管理オブジェクト (SMO)のクラスを使用できます。
これを試して:
次の手順で sproc を作成します。
1.まず、テーブル スクリプトを作成する必要があるすべてのテーブル名を取得します。
2.各テーブルをループして、以下の情報を取得します。
select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'tablename'
3.ループ自体で、テーブル作成スクリプトを動的に入力しようとします。
これを行うSchemaZenという名前のオープン ソース コマンド ライン ユーティリティを作成しました。これは、管理スタジオからスクリプトを作成するよりもはるかに高速であり、出力はよりバージョン管理に適しています。スキーマとデータの両方のスクリプト作成をサポートしています。
スクリプトを生成するには、次を実行します。
schemazen.exe スクリプト --server localhost --database db --scriptDir c:\somedir
次に、スクリプトを実行してデータベースを再作成します。
schemazen.exe create --server localhost --database db --scriptDir c:\somedir