データベースからすべてのテーブル、プロシージャ、その他のオブジェクトのスクリプトを取得する方法はありますか?データベースをスクリプト化するオプションがあることは知っていますが、それは何らかの種類のトップレベルのスクリプトを提供するだけで、すべてのテーブル、プロシージャ、udfs、.etcを作成するためのスクリプトではありません。
データベースからすべてのテーブル、プロシージャ、その他のオブジェクトのスクリプトを取得する方法はありますか?データベースをスクリプト化するオプションがあることは知っていますが、それは何らかの種類のトップレベルのスクリプトを提供するだけで、すべてのテーブル、プロシージャ、udfs、.etcを作成するためのスクリプトではありません。
回答:
Management Studioからデータベースを右クリックします。タスク->スクリプトの生成。
それでうまくいくはずです。
これを行うSchemaZenというオープンソースのコマンドラインユーティリティを作成しました。これは、management studioからのスクリプト作成よりもはるかに高速で、出力はバージョン管理に対応しています。スキーマとデータの両方のスクリプトをサポートします。
スクリプトを生成するには、以下を実行します。
schemazen.exeスクリプト--server localhost --database db --scriptDir c:\ somedir
次に、スクリプトからデータベースを再作成するには、次のコマンドを実行します。
schemazen.exe create --server localhost --database db --scriptDir c:\ somedir
このタスクのユーティリティであるSMOscriptを作成しました。
スクリプトの生成はSMOライブラリによって実行され、SQL 2005および2008の新しいオブジェクトタイプをサポートします。
最終的に、SSMSスクリプト生成の組み合わせを使用してスキーマとデータを抽出し、スクリプトでキーワードの解析とトークンベースの置換を可能にする独自のデータベースツールを使用しました。また、スクリプトが一度だけ適用されることも保証します。
どうして?
スクリプトの例(簡潔にするために編集)
-- Sleep: 5
-- Sleep after creating database to allow file system to create db files
CREATE DATABASE [$Database$]
GO
EXEC sp_dbcmptlevel [$Database$], $CompatabilityLevel$
GO
USE [$Database$]
GO
IF '1'!='$IntegratedSecurity$'
BEGIN
CREATE LOGIN [$Login$] WITH PASSWORD=N'$Password$', DEFAULT_DATABASE=[$Database$]
CREATE USER [$User$] FOR LOGIN [$Login$]
EXEC sp_addrolemember N'db_owner', N'$User$'
END
GO
テーブルデータを見るだけで、Management Studio 2012および2014ですべてのテーブルデータコンテンツを出力するために、それは少し隠されていますが、いくつか調べた後でオプションが見つかりました。