Сценарій цілої бази даних SQL-сервера


95

Чи є спосіб отримати сценарії всіх таблиць, процесів та інших об’єктів з бази даних? Я знаю, що є можливість створити сценарій для бази даних, але це дало мені лише якийсь сценарій верхнього рівня, звичайно, не сценарій для створення всіх таблиць, procs, udfs, .etc.


6
Він позначив його SQL Server 2008, тому, я припускаю, саме цим він користується.
Колін Макей,

1
Хіба це не передбачається перейти на serverfault.com?
Salamander2007

Відповіді:


162

У Management Studio клацніть правою кнопкою миші на базі даних. Завдання -> Створення сценаріїв.

Це має зробити це.


2
Інший варіант - використовувати SQL SMO та програмувати сценарій (тобто, якщо потрібні регулярні сценарії)
RobS

Чи є спосіб налаштувати сценарій для цього, щоб налаштування завжди були однаковими, незалежно від того, хто його запускає? Я передбачаю, що люди з нашої команди розробників щоразу переписують цей файл з різними налаштуваннями ...
Джо Філліпс,

@Joe, я б пішов маршрутом, про який говорить RobS. Ви зможете це зробити за допомогою PowerShell. В іншому випадку починайте переглядати інструменти RedGate або Visual Studio Team Systems із розробником бази даних.
Кріс Брандсма

7
За замовчуванням це не робить сценарій даних. У розділі Параметри таблиці / перегляду виберіть "Дані сценарію -> Правда". Ще одним корисним варіантом є "Script Drop -> True"
Стівен Хоскінг

1
Створений сценарій не міститиме жодної інформації про сортування стовпців, якщо ви не вибрали останню опцію в меню Додатково> Параметри> Створення сценарію. Німецькою мовою є варіант "Sortierung einschließen". Навіть більшість з цих параметрів включені у майстер, що генерує сценарій, цього немає (SQL Server 2008). Вам дійсно потрібно вибрати опцію перед викликом майстра.
Олів'є Фоше

14

Я написав утиліту командного рядка з відкритим кодом на ім'я SchemaZen, яка робить це. Це набагато швидше, ніж сценарії з студії управління, і його вихід є більш зручним для контролю версій. Він підтримує сценарії як схеми, так і даних.

Щоб створити сценарії, виконайте такі дії:

schemazen.exe скрипт - сервер localhost - база даних db --scriptDir c: \ somedir

Потім, щоб відтворити базу даних із сценаріїв, виконайте:

schemazen.exe create --server localhost - база даних db --scriptDir c: \ somedir

Привіт, я хочу отримати запит SQL із моєї локальної бази даних, створеної у Visual Studio, як я можу це зробити за допомогою цього інструменту? Я повинен використовувати напрямок файлу .sdf чи як? Дякую.
Карло А. Лопес,

Це компактний файл SQL DataBase.
Карло А. Лопес,

1
СВЯТА СРАТЬ ЦЕ ШВИДКО І ДИВО.
ConstantineK

1
@hobs Я рада, що ти знайшов це корисним. : D
Сет Ріно

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

4

Я написав утиліту для цього завдання, SMOscript .

Генерація сценарію виконується бібліотекою SMO та підтримує нові типи об’єктів у SQL 2005 та 2008.


Хм, я встановив ваш додаток smo на мою 64-розрядну систему Vista. Встановлення успішне, але я не бачу елемент у своєму каталозі програм або у списку всіх програм
PositiveGuy

3

У підсумку ми використали комбінацію генерації скриптів SSMS для вилучення схеми та даних, а потім використали власний інструмент бази даних, який дозволяє аналізувати ключові слова та замінювати маркери на основі маркерів у сценаріях. Це також гарантує, що сценарії застосовуються лише один раз.

Чому?

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

Я рекомендую подивитися пакувальник RedGate SQL. Це не безкоштовно, але було досить корисно, щоб коштувати.


1

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

  1. Клацніть правою кнопкою миші db
  2. Виберіть "Завдання"> "Створити сценарії ..."
  3. У пункті "Встановити параметри сценаріїв" натисніть "Додатково"
  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.