Скрипт всей базы данных SQL-сервера - PullRequest
89 голосов
/ 22 июля 2009

Есть ли способ получить сценарий для всех таблиц, процедур и других объектов из базы данных? Я знаю, что есть возможность создать сценарий для базы данных, но он дал мне только какой-то сценарий верхнего уровня, конечно, не сценарий для создания всех таблиц, процедур, udfs, .etc.

Ответы [ 7 ]

153 голосов
/ 22 июля 2009

от Management Studio Щелкните правой кнопкой мыши по вашей базе данных. Задачи -> Создать сценарии.

Это должно сделать это.

12 голосов
/ 12 марта 2014

Я написал утилиту командной строки с открытым исходным кодом с именем SchemaZen , которая делает это. Это намного быстрее, чем создание сценариев из студии управления, и его вывод более удобен для контроля версий. Он поддерживает сценарии как схемы, так и данных.

Для генерации скриптов запустите:

schemazen.exe script --server localhost --database db --scriptDir c:\somedir

Затем для воссоздания базы данных из сценариев выполните:

schemazen.exe create --server localhost --database db --scriptDir c:\somedir
4 голосов
/ 22 июля 2009

Я написал утилиту для этой задачи, SMOscript .

Генерация сценариев выполняется библиотекой SMO и поддерживает новые типы объектов в SQL 2005 и 2008.

3 голосов
/ 22 июля 2009

В итоге мы использовали комбинацию генерации скриптов SSMS для извлечения схемы и данных, а затем использовали наш собственный инструмент базы данных, который позволяет выполнять синтаксический анализ ключевых слов и замену токенов в скриптах. Это также гарантирует, что сценарии применяются только один раз.

Почему?

  • Нам необходимо поддерживать установки на SQL Server 2000, 2005 и 2008, и между версиями происходят изменения в типах данных, например, 2005+ имеют nvarchar (max), тогда как 2000 поддерживает только ntext. Таким образом, наши скрипты используют токен и в зависимости от выбора db заменяются на правильный тип.
  • Для выполнения некоторых сценариев требуется период ожидания после выполнения, например, Мы обнаружили, что если вы не подождете несколько секунд после создания новых баз данных с помощью сценария, SQL-сервер может иногда выходить из строя (поскольку у него не было времени для создания файлов db), когда он продолжал создавать таблицы и т. Д.
  • Мы хотели сохранить историю того, какие сценарии были выполнены и когда.
  • Мы хотели, чтобы наш установщик Wix MSI указывал строку подключения и учетные данные, и нам требовался какой-то способ передать их в сценарии, поэтому еще раз, используя токены и некоторую условную логику.

Пример скрипта (отредактировано для краткости)

-- 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
1 голос
/ 10 января 2017

Просто глядя на данные таблицы, чтобы вывести все содержимое данных таблицы в Management Studio 2012 и 2014, это немного скрыто, но я нашел вариант после некоторого просмотра:

  1. Щелкните правой кнопкой мыши по БД
  2. Выберите «Задачи»> «Создать сценарии ...»
  3. В «Настройках сценариев» нажмите «Дополнительно»
  4. В разделе «Общие» установите для «Типы данных для сценария» значение true (оно находится внизу группы «Общие»)
1 голос
/ 22 июля 2009

Я рекомендую посмотреть на упаковщик RedGate SQL. Это не бесплатно, но было достаточно полезно, чтобы стоить цену.

0 голосов
/ 22 июля 2009

Если вам нужно сделать это программно, вы можете использовать библиотеку SQL DMO (OLE) против SQL Server 2000, но более вероятно, что вы захотите использовать библиотеку SQL SMO (собственные библиотеки .NET) против SQL Server 2005 и более поздних .

Обе эти библиотеки являются неотъемлемой частью установки средств администрирования SQL Server.

Это в том случае, если генерации полного сценария базы данных из SQL Server Management Studio недостаточно.

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