Я хотел бы выделить всю схему SQL для БД, а затем создать хэш из нее. Это так, что я могу проверить, возвращает ли скрипт отката схему в исходное состояние. Есть ли СП, который я могу использовать, или какой-нибудь другой хитрый метод? Я бы хотел, чтобы это было как можно быстрее.Самый быстрый способ генерации скриптов 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()));
Жаль, Мэтт, просто попробовал это в LinqPad. Кажется, скрипт сам db, но не схемы таблиц или другие объекты. Кроме того, sb.GetHashCode() является только хэш-значением, которое работает для текущего AppDomain, я думаю! Он возвращает местоположение памяти строкового конструктора, а не хэш его значения, поэтому в следующий раз, когда вы запустите приложение, код будет другим. new StringBuilder («Hello»). GetHashCode()! = new StringBuilder («Hello»). GetHashCode() – mcintyre321
Вы правы. Я сделал ту же ошибку раньше. Возможно, я узнал это время. Я заставил изменить код. Надеюсь, это ближе. По-прежнему существует проблема с пробелами и точно определяется, какие детали нужны, но это должно быть ближе. –
Я написал инструмент под названием SMOscript, который использует вызовы библиотеки SMO для сценария всех объектов в базе данных. Вы можете использовать его для создания одного файла .sql и найти другой инструмент для вычисления хеша в файле результатов. (например, случайный google поднимает this)
не плохо. 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. Самый быстрый способ хеширования набора GUID
- 2. Самый быстрый способ заполнить Db
- 3. Самый быстрый способ генерации биномиальных коэффициентов
- 4. Самый быстрый способ генерации списка ленивых чисел
- 5. Самый быстрый способ генерации случайных битов
- 6. Самый быстрый способ генерации диапазона чисел
- 7. Самый быстрый способ отладки всплывающих скриптов расширения Chrome
- 8. Php: самый быстрый метод хеширования строк для файловой системы?
- 9. Каков самый быстрый способ генерации случайной последовательности из списка данных?
- 10. Самый быстрый способ генерации видео thumbnail размера частиц по FFMPEG
- 11. Самый быстрый способ Алгоритм
- 12. Самый быстрый способ импорта?
- 13. Самый быстрый способ взять
- 14. Самый быстрый способ сохранения изменений
- 15. Лучший (самый быстрый) способ генерации ~ миллиарда VIN в PostgreSQL
- 16. Самый быстрый способ генерации случайного двойного числа в java
- 17. Каков самый быстрый способ генерации вектора случайных бит?
- 18. Каков самый быстрый способ генерации большого количества XML-данных?
- 19. Самый быстрый способ генерации перестановки массива целых чисел
- 20. Каков самый быстрый способ генерации первых n степеней 2?
- 21. Метод генерации быстрых идентификаторов с использованием хеширования
- 22. Самый быстрый способ для запросов Querieng
- 23. Более быстрый способ генерации перестановок
- 24. Самый простой способ генерации графов
- 25. Самый быстрый способ увеличения счетчика в MySQL DB
- 26. Самый оптимальный способ генерации чисел
- 27. Drupal 7: самый быстрый способ проверить, существует ли запись db
- 28. Каков самый быстрый способ сделать массив из столбца db?
- 29. Самый быстрый/самый простой способ обновить datagridview?
- 30. Самый быстрый способ чтения файла
1: 2005/2008, 2: Нет, 3: Thats для V2 :) – mcintyre321