DBのSQLスキーマ全体を作成してから、そのハッシュを生成したいと思います。これは、ロールバックスクリプトがスキーマを元の状態に戻すかどうかを確認できるようにするためです。私が使用できるSPやその他の狡猾な方法はありますか?私はそれができるだけ速くなるようにしたいと思います。スクリプト生成の最速方法ハッシュのためのSQLサーバーのDBスキーマ
答えて
次は動作するはずです:
Microsoft.SqlServer.Management.Smo.Server srv = new Microsoft.SqlServer.Management.Smo.Server("Server");
Microsoft.SqlServer.Management.Smo.Database db = srv.Databases["DB_Name"];
// Set scripting options as needed using a ScriptingOptions object.
Microsoft.SqlServer.Management.Smo.ScriptingOptions so = new ScriptingOptions();
so.AllowSystemObjects = false;
so.ScriptDrops = false;
so.Indexes = true;
so.ClusteredIndexes = true;
so.PrimaryObject = true;
so.SchemaQualify = true;
so.IncludeIfNotExists = false;
so.Triggers = true;
System.Collections.Specialized.StringCollection sc = new System.Collections.Specialized.StringCollection();
StringBuilder sb = new StringBuilder();
foreach (Table item in db.Tables)
if (!item.IsSystemObject)
{
sc = item.Script(so);
foreach (string s in sc)
sb.Append(s);
}
foreach (StoredProcedure item in db.StoredProcedures)
if (!item.IsSystemObject)
if (!item.IsSystemObject)
{
sc = item.Script(so);
foreach (string s in sc)
sb.Append(s);
}
foreach (UserDefinedFunction item in db.UserDefinedFunctions)
if (!item.IsSystemObject)
if (!item.IsSystemObject)
{
sc = item.Script(so);
foreach (string s in sc)
sb.Append(s);
}
foreach (Trigger item in db.Triggers)
if (!item.IsSystemObject)
if (!item.IsSystemObject)
{
sc = item.Script(so);
foreach (string s in sc)
sb.Append(s);
}
//sb.GetHashCode();
// For a better hash do this.
System.Security.Cryptography.MD5CryptoServiceProvider hashProvider = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hashData = hashProvider.ComputeHash(ASCIIEncoding.ASCII.GetBytes(sb.ToString()));
申し訳ありませんMatt、LinqPadで試しました。これは、db自体をスクリプトするようですが、スキーマやその他のオブジェクトはテーブルではありません。 また、sb.GetHashCode()は、私が考える現在のAppDomainで機能するハッシュ値です。これは、値のハッシュではなく、stringbuilderのメモリ位置を返します。次回にアプリケーションを実行すると、コードは異なります。新しいStringBuilder( "Hello")。GetHashCode()!=新しいStringBuilder( "Hello")。GetHashCode() – mcintyre321
あなたは正しいです。私は前に同じミスをしました。たぶん私はこの時間を学んだでしょう。私はコードを編集しました。うまくいけば、これはもっと近いです。空白の問題があり、細部が何が求められているかを正確に判断することができますが、これはより近づくはずです。 –
SMOscriptというツールを書いて、SMOライブラリ呼び出しを使用してデータベース内のすべてのオブジェクトをスクリプト化しました。これを使用して単一の.sqlファイルを作成し、結果ファイルのハッシュを計算する別のツールを見つけることができます。 (無作為なgoogleは例えばthisを持ち出す)
悪くないためのthats。 SMOは私の好きなところでは少し遅いです。おそらくOpenDbDiffを使用して、私が使用できる単一のSP呼び出しを持っていないと思われるような何かを行うでしょう。 – mcintyre321
テーブルとキーをコードと制約から分離すると、後者を簡単にハッシュできます。
SELECT
CHECKSUM_AGG(BINARY_CHECKSUM (*))
FROM
(SELECT
definition
FROM
sys.default_constraints
UNION ALL
SELECT
definition
FROM
sys.sql_modules
UNION ALL
SELECT
definition
FROM
sys.check_constraints
) foo
私はテーブル、sprocs、私は恐れているすべての制約のハッシュが必要です! – mcintyre321
したがって、不完全な答えは-1ですか?あなたはすでにツールを書いていると仮定します。http://stackoverflow.com/questions/6371/how-do-you-manage-databases-in-development-test-and-production/541419#541419、なぜ質問しましたか? ? – gbn
- 1. 速いSQL Server 2005スクリプトの生成
- 2. DB上のSQLスクリプトで生成されたID(Django ORM)の解決方法
- 3. 小さなサーバーを書くための最も速い方法
- 4. SQLの最速の 'GROUP BY'スクリプト
- 5. PHP:ファイルシステムのための最速の文字列ハッシュ法ですか?
- 6. SQLスクリプトを使用してSQLサーバーDBを作成する
- 7. SQL Serverデータベースを生成するための有効なSQLスクリプトの作成
- 8. Javaのsqlスキーマからormマッピング・クラスを生成する方法
- 9. テーブルのスクリプトを生成するためのSQLサーバスクリプト
- 10. Javaの最速ハッシュ関数
- 11. パスワード、塩、ハッシュ、DB:百万回のため
- 12. ハッシュのリストを検索する最速の方法
- 13. スキーマとデータの両方のスクリプトを生成
- 14. フォーラムサイトのためにsql DBを整理する最善の方法
- 15. 生成されたクラスにXMLスキーマのドキュメントのJavadocを含める方法
- 16. リフトのDBスキーマからモデルコードを生成する方法はありますか?
- 17. PostgreSQLのSQLクエリでWAL生成速度をクエリする方法
- 18. nginx高速cgiのために生成されたスクリプトを再ロードする方法
- 19. .NETでポリゴンからビットマップを生成する最速の方法
- 20. SQLサーバーのdbメールキューのクリア
- 21. SQL Express DBのテーブルのサブセットのスクリプトをバックアップする方法
- 22. 既存のmysql dbスキーマのdjango管理コンソールを生成
- 23. スキーマ変更のためのSQLユーティリティスクリプト
- 24. データを読み込むための最速の方法
- 25. テストのためにoracleデータベースをリセットする最速の方法
- 26. データを取り出すための最速の方法
- 27. scikit-bioでfastqを読むための最速の方法
- 28. 複数のサーバーにSQLスクリプトをデプロイするためのInvoke-Async。
- 29. 複数のユーザー(スキーマ)でSQLスクリプトを実行する方法 - ORACLE
- 30. Oracleスキーマ(スクリプト可能)のDDL全体を生成する方法は?
1:2005/2008、 2:いや、 3:V2 :) – mcintyre321