Скрипт всей базы данных SQL-Server


95

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


6
Он пометил его как SQL Server 2008, так что я предполагаю, что он этим и пользуется.
Colin Mackay

1
Разве это не предполагает переход на serverfault.com?
Salamander

Ответы:


163

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

Это должно сработать.


2
Другой вариант - использовать SQL SMO и
записать

Есть ли способ настроить скрипт для этого, чтобы настройки всегда были одинаковыми, независимо от того, кто его запускает? Я предвижу, что люди из нашей команды разработчиков каждый раз будут перезаписывать этот файл с разными настройками ...
Джо Филлипс,

@ Джо, я бы пошел по тому маршруту, о котором говорит RobS. У вас должно получиться сделать это с помощью PowerShell. В противном случае начните искать инструменты RedGate или Visual Studio Team Systems с Database Developer.
Крис Брандсма,

7
По умолчанию скрипт данных не выполняется. В разделе «Параметры таблицы / просмотра» выберите «Данные сценария -> Истина». Еще одна полезная опция - «Script Drop -> True»
Стивен Хоскинг

1
Сгенерированный сценарий не будет содержать никакой информации о сопоставлении столбцов, если вы не выбрали последний вариант в меню «Дополнительно»> «Параметры»> «Создание сценария». На немецком языке это вариант "Sortierung einschließen". Даже большинство из этих параметров включены в мастер создания сценария, а этот - нет (SQL Server 2008). Вам действительно нужно выбрать опцию перед вызовом мастера.
Olivier Faucheux,

14

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

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

schemazen.exe сценарий --server localhost --database db --scriptDir c: \ somedir

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

schemazen.exe создать --server localhost --database db --scriptDir c: \ somedir

Привет, я хочу получить SQL QUERY из моей локальной базы данных, созданной в Visual Studio, как я могу это сделать с помощью этого инструмента? Я должен использовать направление файла .sdf или как? Спасибо.
Карло А. Лопес,

Это компактный файл базы данных SQL.
Карло А. Лопес

1
HOLY CRAP ЭТО БЫСТРЫЙ И УДИВИТЕЛЬНЫЙ.
ConstantineK

1
@hobs Я рад, что вы нашли это полезным. : D
Сет Рино

1
@SethReno испортил системные индексы на моем db = SMO не может ничего написать, ваш сценарий может, так что в основном я сэкономил массу времени, выполняя дерьмо вручную. Кстати, впечатляюще быстрая обратная инженерия всего, например, в 1000 раз быстрее, чем SSMS, и кажется быстрее, чем SMO сама по себе (не в последнюю очередь из-за времени запуска).
ConstantineK

4

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

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


Хм, я установил ваше приложение smo на свой 64-битный Vista. Установка прошла успешно, но я не вижу ни одного элемента в каталоге программ или в списке «Все программы»
PositiveGuy,

3

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

Зачем?

  • Нам необходимо поддерживать установку на SQL Server 2000, 2005 и 2008, и есть изменения в типах данных между версиями, например, 2005+ имеют nvarchar (max), тогда как 2000 поддерживает только ntext. Таким образом, наши сценарии используют токен и заменяют его на правильный тип на основе выбора базы данных.
  • Для выполнения некоторых сценариев требуется период ожидания после выполнения, например, мы обнаружили, что если вы не подождали несколько секунд после создания новой базы данных с помощью сценария, SQL Server иногда может давать сбой (потому что у него не было времени для создания базы данных. files), когда он перешел к созданию таблиц и т. д.
  • Мы хотели вести историю того, какие скрипты были выполнены и когда.
  • Мы хотели, чтобы наш установщик 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

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


1

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

  1. Щелкните правой кнопкой мыши db
  2. Выберите "Задачи"> "Создать сценарии ..."
  3. В "Set Scripting Options" нажмите "Advanced".
  4. В разделе "Общие" установите для параметра "Типы данных в сценарий" значение true (оно находится в нижней части группы "Общие").

0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.