Формирование скриптов (среда SQL Server Management Studio)
SQL Server Management Studio предоставляет два механизма создания скриптов Transact-SQL. Создать скрипты для нескольких объектов можно с помощью мастера формирования и публикации скриптов. Можно также создать скрипты для отдельных или нескольких объектов с помощью меню Сформировать скрипт как в обозревателе объектов.
Подробное руководство по созданию скриптов для различных объектов с использованием SQL Server Management Studio (SSMS) см. в руководстве по Создание скриптов для объектов в среде SQL Server Management Studio.
Перед началом
Выберите механизм, который лучше всего соответствует имеющимся требованиям.
Мастер формирования и публикации скриптов
С помощью мастера формирования и публикации скриптов можно создать скрипт Transact-SQL для нескольких объектов. Этот мастер создает скрипт для всех объектов базы данных или скрипт для подмножества выделенных объектов. Мастер позволяет настраивать различные параметры скрипта, такие как включение разрешений, параметры сортировки, ограничения и т. д. Инструкции по использованию мастера см. в разделе Мастер формирования и публикации скриптов.
Меню «Сформировать скрипт как» в обозревателе объектов
Меню Сформировать скрипт как в обозревателе объектов служит для создания скрипта для одного объекта, нескольких объектов или нескольких инструкций одного объекта. Можно выбрать один из нескольких типов скрипта, например для создания, изменения или удаления объекта. Сохранить скрипт можно в окне редактора запросов — в файл или в буфер обмена. Скрипт создается в формате Юникода.
Создание скрипта для одного объекта
Создание скрипта для одного объекта
- В обозревателе объектов подключитесь к экземпляру компонента Компонент SQL Server Database Engine и разверните его.
- Разверните узел Базы данных, а затем разверните базу данных, содержащую объекты, для которых необходимо создать скрипт.
- Разверните категорию объекта. Например, разверните узел Таблицы или узел Представления .
- Щелкните объект правой кнопкой мыши, наведите указатель на пункт Создать скрипт для , например Создать скрипт для таблицы.
- Укажите тип скрипта, например Создать или Изменить.
- Выберите расположение для сохранения скрипта, например Новое окно редактора запросов или Буфер обмена.
Для создания скрипта для нескольких объектов одной категории можно использовать панель Подробности обозревателя объектов.
- В обозревателе объектов подключитесь к экземпляру компонента Компонент SQL Server Database Engine и разверните его.
- Разверните узел Базы данных, а затем разверните базу данных, содержащую объекты, для которых необходимо создать скрипт.
- Разверните узел категории типов объектов, для которых требуется создать скрипт, например узел Таблицы .
- Откройте панель Подробности обозревателя объектов . Для этого нажмите клавишу F7или откройте меню Вид и выберите пункт Подробности обозревателя объектов.

- Щелкните левой кнопкой один из объектов, который нужно включить в скрипт.
- Удерживая клавишу CTRL, щелкните левой кнопкой второй объект, который необходимо включить в скрипт.
- Щелкните правой кнопкой мыши один из выделенных объектов и выберите Создать скрипт для .

Как создать скрипт для получения данных из sql БД?
Добрый день!
Задача в следующем:
Есть база данных и права к ней на чтение. Необходимо выполнять к ней запрос раз в день в автоматическом режиме и выгружать результат в файлик. Для этого есть виртуальная машина на Centos. Даже не знаю как к этой задаче подступиться. Гугл подсказывает bash скрипты. Может есть готовое решение?
Или кто то подобное уже делал?
- Вопрос задан более двух лет назад
- 324 просмотра
6 комментариев
Средний 6 комментариев

Речь, как я понимаю, идёт о Microsoft SQL Server?
Только пользователи этой СУБД искренне уверены в том что SQL — это не язык, на котором пишут запросы, а товар, который покупают у Microsoft
pfedorov031090 @pfedorov031090 Автор вопроса
Роман Юрьевич Ипатьев, Возможно я не так выразился, я знаю что SQL язык, вручную часто составляю запросы на нем, вопрос не в этом. А как эти запросы автоматизировать.

Ещё раз. Речь идёт о Microsoft SQL Server?
pfedorov031090, какая СУБД?
А так, у любой СУБД есть консольный клиент, который умеет подключаться и отправлять запросы. Часто даже умеет выводить данные в разных форматах (типа CSV, XML и пр.). Пишите скрипт на bash, запускаете его по крону и все.
pfedorov031090 @pfedorov031090 Автор вопроса
СУБД MySQL и PostgreSQL на втором сервере

Что значит «на втором сервере» Откуда здесь взялся второй сервер?
«Есть база данных и права к ней на чтение» — о какой СУБД здесь речь?
Решения вопроса 0
Ответы на вопрос 2

Для правильного вопроса надо знать половину ответа
echo "SELECT * FROM \`database\`.\`table\`" | mysql -uUser -pPassword -hHost > /out/file/name
Ну а если нужен какой-то определённый формат выгрузки, то придётся писать свой скрипт.
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Сетевой и системный админ, SQL-программист.
MySQL умеет выгружать результат выполнения запроса в файл.
У MySQL есть встроенный планировщик.
Так что создаём Event Procedure, которая выгружает результат нужного запроса в файл в нужном формате, запускаем Event Scheduler. и всё.
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- SQL
- +1 ещё
Массив структур в Hive. Как проверить вхождение в массив структуры по маске?
- 1 подписчик
- вчера
- 72 просмотра
Программная генерация скриптов для MSSQL
В силу частых и неупорядоченных изменений базы данных, большим числом пользователей, часто возникает вопросы о истории изменений. Речь не идет о тотально логирование всех изменений, которые происходят с базой в течение дня. Интерес представляют собой снимки структуры БД каждый день после окончания рабочего дня. С помощью SQL Server Management Studio можно сгенерировать скрипты, но поштучно или все сразу. Полную свободу действий можно получить использовав набор библиотек от SQL Server Management Studio в вашем .NET приложение. Описание программы генерации скриптов: таблиц, представлений, процедур далее.
Присоединение библиотек
Потребуются классы из пространств имен:
using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlServer.Management.Common; using Microsoft.SqlServer.Management.Sdk.Sfc;
Библиотеки, которые их содержат имеют такие же названия и находятся в папке:
C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies
или
C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies
в зависимости от версии SQL Server.
Выполняемый сценарий
Генератор скриптов создает отдельные папки Tables, Views, Procedures в указанной директории. Создает скрипты создания объектов и сохраняет в отдельных файлах в соответствующих папках. Для таблиц генерация производиться с учетом зависимостей(ключи, индексы и т.д.) и без. Создает общий файл однотипных скриптов в указанной директории.
//Создается экземпляр сервера Server myServer = new Server(@"myServ"); //Аутентификация Windows myServer.ConnectionContext.LoginSecure = true; //Открыть соединение myServer.ConnectionContext.Connect(); //Директория создается автоматически, с новой папкой на каждый день string dir = Application.StartupPath +@"\"+ DateTime.Now.Day.ToString() + "_" + DateTime.Now.Month.ToString() + "_" + DateTime.Now.Year.ToString(); Directory.CreateDirectory(dir); //Генерация таблиц, описание ниже GenerateTableScript(myServer,dir); //Генерация процедур, описание ниже GenerateProceduresScript(myServer, dir); //Генерация представлений, описание ниже GenerateViewScript(myServer, dir); //Закрыть соединение myServer.ConnectionContext.Disconnect();
Генерация скриптов для таблиц
private static void GenerateTableScript(Server myServer, string path) < Directory.CreateDirectory(path + @"\Tables\"); string text = ""; string textWithDependencies = ""; //Создаем экземпляр класса, который будет генерировать скрипты Scripter scripter = new Scripter(myServer); //Создаем экземпляр класса базы данных, "ZZZ" - название базы данных Database myAdventureWorks = myServer.Databases["ZZZ"]; //Создаем экземпляр класса настроек генерации скриптов ScriptingOptions scriptOptions = new ScriptingOptions(); //Функциональность свойств у класса настроек генерации легко определяема //Не создавать скрипт с Drop scriptOptions.ScriptDrops = false; //Не включать скрипт с If Not Exists scriptOptions.IncludeIfNotExists = false; //Перебираем все таблицы foreach (Table myTable in myAdventureWorks.Tables) < //Получаем sql запрос на основание выбранных параметров StringCollection tableScripts = myTable.Script(scriptOptions); //Переменная для объединения строк string newSql = ""; //Объединяем строки foreach (string script in tableScripts) < newSql = newSql + script; text = text + script; >//Записываем в файл скрипт создания таблицы без зависимостей File.WriteAllText(path + @"\Tables\" + myTable.Name + ".sql", newSql); //Определяем новые параметры генерации scriptOptions.DriAllConstraints = true; scriptOptions.DriAllKeys = true; scriptOptions.DriDefaults = true; scriptOptions.DriForeignKeys = true; scriptOptions.DriIndexes = true; scriptOptions.DriNonClustered = true; scriptOptions.DriPrimaryKey = true; scriptOptions.DriUniqueKeys = true; tableScripts = myTable.Script(scriptOptions); newSql = ""; foreach (string script in tableScripts) < newSql = newSql + script; textWithDependencies = text + script; >//Записываем в файл скрипт создания таблицы с зависимостями File.WriteAllText(path + @"\Tables\" + myTable.Name + "_WithDependencies.sql", newSql); > //Записываем общие объединяющие файлы File.WriteAllText(path + @"\" + "AllTable_WithDependencies.sql", text); File.WriteAllText(path + @"\" + "AllTable.sql", text); >
Генерация скриптов для представлений
private static void GenerateViewScript(Server myServer, string path) < Directory.CreateDirectory(path + @"\View\"); string text = ""; Scripter scripter = new Scripter(myServer); Database myAdventureWorks = myServer.Databases["ZZZ"]; ScriptingOptions scriptOptions = new ScriptingOptions(); scriptOptions.ScriptDrops = false; scriptOptions.IncludeIfNotExists = false; foreach (Microsoft.SqlServer.Management.Smo.View myView in myAdventureWorks.Views) < StringCollection ProcedureScripts = myView.Script(scriptOptions); ProcedureScripts = myView.Script(); string newSql = ""; foreach (string script in ProcedureScripts) < newSql = newSql + script; text = text + script; >File.WriteAllText(path + @"\Views\" + myView.Name + ".sql", newSql); > File.WriteAllText(path + @"\" + "AllView.sql", text); >
Генерация скриптов для процедур
private static void GenerateProceduresScript(Server myServer, string path) < Directory.CreateDirectory(path + @"\Procedures\"); string text = ""; Scripter scripter = new Scripter(myServer); Database myAdventureWorks = myServer.Databases["ZZZ"]; ScriptingOptions scriptOptions = new ScriptingOptions(); scriptOptions.ScriptDrops = false; scriptOptions.IncludeIfNotExists = false; foreach (StoredProcedure myProcedure in myAdventureWorks.StoredProcedures) < StringCollection ProcedureScripts = myProcedure.Script(scriptOptions); ProcedureScripts = myProcedure.Script(); string newSql = ""; foreach (string script in ProcedureScripts) < newSql = newSql + script; text = text + script; >File.WriteAllText(path + @"\Procedures\" + myProcedure.Name + ".sql", newSql); > File.WriteAllText(path + @"\" + "AllProcedure.sql", text); >
Заключение
Описанная функциональность может быть полезна для логирования изменений в структуре баз данных, автоматической фильтрации выгружаемых объектов по названию. Например, префикс в названиях может указывать на отдельное направление в проекте. Общие и отдельные скрипты можно складывать в SVN. Можно писать автоматическое сравнение объектов базы и отсылку сообщений ответственному лицу по факту произошедших изменений.
Код можно посмотреть здесь.
Основой материала послужила статья: Generate Scripts for database objects with SMO for SQL Server
- Management.Smo
- генерация скриптов SQL
- MSSQL
SQL скрипт для создания БД
Заранее спасибо. Как это сделать я знаю. Не уверен какой вариант нужно делать и насколько это принципиально.
Отслеживать
user177221
задан 29 дек 2016 в 20:48
185 2 2 серебряных знака 14 14 бронзовых знаков
Я бы рекомендовал 4 вариант
29 дек 2016 в 21:07
а еще есть вот такая прекрасная вещь — liquibase.org очень удобно описывать БД и изменения БД.
29 дек 2016 в 22:02
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
В задании чётко описаны инструменты и объекты, которые необходимо использовать. Поэтому решение имхо должно быть таким:
1) Сервер БД MySQL -предполагается, что он уже есть, по этому пункту никакие действия не требуются. Если нет — проинсталлировать, возможно, организовав загрузку инсталлятора с официального сайта (хотя вряд ли задание требует, чтобы приложение устанавливало сервер при его отсутствии), или по крайней мере сообщить, что MySQL недоступен, и неплохо бы с этим разобраться.
2) SQL-скрипт для создания БД — необходимо написАть. Именно в формате .SQL — ну то есть команды создания БД (и, вероятно, таблиц в ней, возможно, даже с заполнением данными таблиц-справочников с предопределённым содержимым) в обычном текстовом файле. Создавать — да хоть с нуля в блокноте, хоть создать БД требуемой структуры и начального наполнения любыми средствами (скажем, штатным WorkBench) и затем получить дамп. Должен получиться один (или несколько) текстовый файл. Расширение в общем неважно, но лучше, если оно будет .SQL.
3) JDBC для доступа к БД — полагаю, имеется в виду создание приложения, которое в методе или классе либо считает файл .SQL и построчно организует выполнение его на сервере, используя для доступа JDBC, либо организует загрузку файла .SQL в файловую систему MySQL-сервера (если он не локальный) и с использованием JDBC подаст команду на выполнение скрипта ( source script.sql; ).
