Создать сценарий эквивалентный для Transact SQL - PullRequest
1 голос
/ 18 декабря 2010

В SQL Server Management Studio есть опция «Генерировать сценарии».В настоящее время мы переносим базу данных SQL Server 2008 в базу данных SQL Server 2005 путем генерации сценариев и запуска SQLCMD в этом файле сценария SQL для отправки на локальный экземпляр SQL Server 2005 года.Я создаю C # -программу для выполнения целого ряда других задач, но мне также нужно, чтобы она преобразовывала базу данных 2008 года и перемещала ее на SQL Server 2005 года.Существует ли SQL-оператор Transact или более простой способ преобразования базы данных 2008 года в базу данных 2005 года?Спасибо.

Ответы [ 3 ]

4 голосов
/ 18 декабря 2010

Ваш результат разработки должен быть не двоичным файлом базы данных (файл .MDF), а сценарием развертывания. Вы относитесь к развертыванию и обновлению базы данных так же, как и к любому другому исходному файлу, ставите его под контроль исходного кода, проверяете рецензирование кода при регистрации и т. Д. И т. Д. Прямое изменение .MDF, а затем реверс-инжиниринг для его развертывания просто плохо. Проблема, с которой вы столкнулись сейчас, является лишь одной из проблем, и есть еще много проблем, особенно в отношении изменений схемы проблем, выполненных во время обновления версии приложения. См. Контроль версий и ваша База данных .

Теперь верно, что весь набор инструментов VS пытается увести вас по пути «просто отредактируйте свой MDF в VS Database Explorer, и все будет хорошо». Ничего не будет хорошо, и один или несколько крахов развертывания просто впереди в вашей жизни, но давайте представим, что VS делает хорошие вещи.

Вы можете автоматизировать извлечение текущей схемы и ее развертывание с помощью сторонних коммерческих инструментов, таких как SQL Compare от Red Gate, или вы можете довольно легко создавать свои собственные «Сгенерировать сценарии». SSMS все, что он делает, вызывает возможности сценариев SMO для создания сценариев для всей базы данных. Вы можете сделать то же самое: создать экземпляр объекта Scripter, затем добавить к нему объекты, которые вы хотите создать в сценарии, и затем извлечь сценарий, сгенерированный T-SQL. Это в точности , что делает «Генерация скриптов» в SSMS. В MSDN есть пример для сценариев :

   //Connect to the local, default instance of SQL Server. 
  Server srv = new Server(); 

   //Reference the AdventureWorks2008R2 database.  
  Database db = srv.Databases["AdventureWorks2008R2"]; 

   //Define a Scripter object and set the required scripting options. 
  Scripter scrp = new Scripter(srv); 
   scrp.Options.ScriptDrops = false; 
   scrp.Options.WithDependencies = true; 

   //Iterate through the tables in database and script each one. Display the script. 
   //Note that the StringCollection type needs the System.Collections.Specialized namespace to be included. 
   Microsoft.SqlServer.Management.Sdk.Sfc.Urn[] smoObjects = new Microsoft.SqlServer.Management.Sdk.Sfc.Urn[1] ;
   foreach (Table tb in db.Tables) {   
      smoObjects[0] = tb.Urn; 
      if (tb.IsSystemObject == false) { 
         System.Collections.Specialized.StringCollection sc;
         sc = scrp.Script(smoObjects); 
         foreach ( string st in sc) { 
            Console.WriteLine(st); 
         } 
      } 
   } 
0 голосов
/ 18 декабря 2010

Создание сценариев объектов базы данных, а затем запуск их на старом экземпляре - вот путь.Если у вас есть кодированные функции, специфичные для SQL 2008, вы сразу же обнаружите его при запуске сценария в 2005 году (так что протестируйте его, прежде чем пробовать его в Production!).

Настройка режима совместимости не будет помогите здесь.Если у меня есть объявленный (2008) тип таблицы, и я использую его с параметрами хранимых процедур, то ничего SQL или кто-либо еще может сделать, чтобы перенести его на 2005 год. Использование «современных» систем для поддержки устаревших систем - это уродливов лучшем случае.

Просто потому, что я делаю это снова, мой предпочтительный путь миграции:

  • Иметь среды разработки, "постановки" и производства, все в 2005
  • Обновление подготовки к 2008 г.
  • Продолжайте разработку в dev / 2005 и внесите изменения в подготовку (2008) и производство (2005).Когда он будет работать в 2008 году (и почти наверняка так и будет), mgmt будет доволен модернизацией производства.И ваши сборки 2005 года все еще будут работать на производстве 2005 года.
  • Обновите производство.Эй, это работало на стадии, так что это безопасно и разумно
  • И все, что сгенерировано в (2005) разработках, работает над (2008) подготовкой и производством
  • И только тогда вы обновляете разработку и переходите киграй с новыми игрушками
0 голосов
/ 18 декабря 2010

Импорт из одной БД в другую

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...