Как сгенерировать SQL скрипт создания объектов и данных в Microsoft SQL Server?
Привет! Сегодня мы поговорим о том, как можно сгенерировать SQL скрипты создания объектов базы данных Microsoft SQL Server, включая сами данные, стандартными средствами SQL Server Management Studio (SSMS).
Что такое SQL скрипт объекта базы данных?
SQL скрипт объекта базы данных – это SQL инструкция, с помощью которой создается этот объект, сохраненная в текстовом файле.
Иными словами, это простой SQL запрос, обычно сохраненный в текстовом файле с расширением .sql. В этом SQL запросе содержатся все необходимые инструкции создания объекта (или объектов), включая инструкции наполнения его данными.
Такой SQL скрипт можно открыть любым текстовым редактором, скопировать текст SQL запроса и выполнить, например, в среде SQL Server Management Studio, таким образом, создав объект базы данных, не разрабатывая соответствующие SQL инструкции самостоятельно.
Также SQL скрипты можно открыть специальными программами, которые умеют работать с SQL скриптами, и выполнять их на базе данных.
Что могут содержать SQL скрипты?
SQL скрипты объектов базы данных могут содержать:
- Инструкции создания таблиц (CREATE);
- Заполнение таблиц (инструкции INSERT);
- Определение представлений, функций, хранимых процедур, триггеров;
- Определение ограничений и индексов;
- Определение создания других объектов;
- И другие SQL инструкции.
Для чего могут потребоваться SQL скрипты объектов базы данных?
SQL скрипты объектов базы данных могут потребоваться администраторам или разработчикам, например, для того, чтобы в случае необходимости иметь возможность быстро восстановить эти объекты.
Или для того, чтобы передать эти SQL скрипты другому администратору, разработчику или заказчику, чтобы он создал подобные объекты на своем экземпляре SQL Server.
Таким образом, такие SQL скрипты необходимы для хранения копий SQL инструкций, с помощью которых создавались объекты базы данных.
Как создать SQL скрипт объекта базы данных в Microsoft SQL Server?
Так как SQL скрипт – это обычный текстовый файл, его можно создать вручную, например, когда Вы разрабатываете объект БД, Вы просто сохраняете SQL инструкцию в файл, и добавляете в него по мере необходимости другие SQL инструкции.
Однако также возможно автоматически сгенерировать SQL скрипты объектов базы данных специальными инструментами, например, в среде SQL Server Management Studio (SSMS). А как это делается, я сейчас и покажу.
Заметка! Если Вас интересует SQL и T-SQL, рекомендую посмотреть мои видеокурсы по T-SQL, с помощью которых Вы «с нуля» научитесь работать с SQL и программировать с использованием языка T-SQL в Microsoft SQL Server.
Создание SQL скрипта объекта базы данных Microsoft SQL Server
В качестве исходных данных у меня будет база данных TestDB и таблица Goods, SQL скрипт которой мне и нужно создать. При этом мне необходимо, чтобы скрипт включал не только определение инструкции CREATE, но и данные, которые содержит эта таблица.
В качестве инструмента я буду использовать SQL Server Management Studio.
Итак, давайте начнем.
Шаг 1 – Запускаем SSMS
Сначала запускаем среду SQL Server Management Studio любым удобным для Вас способом, иными словами, никаких особых манипуляций с открытием SSMS выполнять не требуется.
Шаг 2 – Запускаем задачу «Сформировать скрипты»
Далее в обозревателе объектов находим нужную нам базу данных, затем открываем контекстное меню правой кнопкой мыши, ищем пункт «Задачи», и выбираем задачу «Сформировать скрипты».

В итоге запустится мастер создания скриптов. В окне «Введение» можем сразу нажать «Далее».

Шаг 3 – Выбираем объекты для включения в SQL скрипт
После этого нам нужно выбрать объекты базы данных, которые необходимо включить в SQL скрипт. При этом нам доступно два варианта:
- Создать скрипт для всей базы данных и всех ее объектов – этот вариант предполагает, что Вам нужен скрипт создания всех объектов в БД;
- Выбрать отдельные объекты базы данных – в данном случае в скрипт включатся SQL инструкции только тех объектов, которые Вы укажете.
Так как мне нужно сохранить только одну таблицу, я выбираю второй вариант и отмечаю нужную таблицу, т.е. в моем случае Goods.

Шаг 4 – Задание параметров SQL скрипта
Теперь мы можем указать параметры формирования скрипта, в частности, каким образом мы хотим получить скрипт.
Доступно 3 способа:
- Сохранить в файл – при этом мы можем сами указать нужный нам каталог для сохранения;
- Сохранить в буфер обмена;
- Сохранить в новое окно запросов.
Также есть и дополнительные параметры, чтобы их открыть, необходимо нажать на соответствующую кнопку.

В дополнительных параметрах мы можем более тонко настроить принцип формирования SQL скрипта, например, для того чтобы скрипт включал еще и SQL инструкции создания данных, необходимо в параметрах отметить соответствующий пункт, т.е. указать «Схема и данные».
Также Вы можете включить в скрипты инструкции DROP на случай, если Вам нужно пересоздать объекты.
После того как все параметры заданы, нажимаем «ОК», а после для продолжения кнопку «Далее».

Шаг 5 – Проверка параметров и запуск процесса создания скрипта
На данном шаге все проверяем и запускаем сам процесс формирования скрипта, т.е. нажимаем «Далее».

Шаг 6 – Завершение процесса и результат
Когда процесс будет завершен, программа сообщит Вам об этом, нажимаем «Готово».

В результате в каталоге, который Вы указали в параметрах формирования скрипта, появится SQL скрипт, а по факту обычный текстовый файл с расширением .sql.
Если его открыть, например, текстовым редактором, то можно посмотреть на все SQL инструкции. Они будут выглядеть примерно следующим образом.

Видео-инструкция
На сегодня это все, надеюсь, материал был Вам полезен, пока!
Скрипт sql не запускается при старте приложения
Работаю над приложением на Spring Boot. Написал SQL скрипт для Oracle БД. Суть скрипта в том, чтобы при старте приложения проверялось наличие конкретного столбца в таблице. Если столбца нет, то необходимо его создать и скопировать в него данные из старого столбца из этой таблице. Когда пробую запустить скрипт из DBeaver, то все отрабатывает нормально, но когда вставляю в .sql файл и запускаю приложение, то скрипт не срабатывает. Но необходимо, чтобы скрипт запускался сам каждый раз при старте приложения, так как приложение пишется для клиентов, а у них там некому запускать скрипты вручную после старта. Приложению уже несколько лет, писал его не я. Подскажите, пожалуйста, почему скрипт из .sql файла может не запускаться? Вот сам скрипт:
DECLARE v_column_exists NUMBER := 0; BEGIN SELECT COUNT(*) INTO v_column_exists FROM user_tab_cols WHERE UPPER(column_name) = 'password_clob' AND UPPER(table_name) = 'my_table'; IF (v_column_exists = 0) THEN EXECUTE IMMEDIATE 'ALTER TABLE my_table ADD (password_clob CLOB)'; EXECUTE IMMEDIATE 'UPDATE my_table SET password_clob = password'; END IF; END;
Update Внёс правки, которые посоветовал @0xdb, но все равно пока не добился желаемого результата. Сыпятся ошибки:
2021-08-30 18:40:01.659DEBUG [main] (ScriptUtils.java:618) - Failed to execute SQL script statement #498 of class path resource [oracle/oracleScripts.sql]: DECLARE column_exists NUMBER java.sql.SQLException: ORA-06550: line 1, column 28: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: := . ( @ % ; not null range default character Caused by: Error : 6550, Position : 27, Sql = DECLARE column_exists NUMBER, OriginalSql = DECLARE column_exists NUMBER, Error Msg = ORA-06550: line 1, column 28: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: := . ( @ % ; not null range default character 2021-08-30 18:40:01.662DEBUG [main] (ScriptUtils.java:618) - Failed to execute SQL script statement #499 of class path resource [oracle/oracleScripts.sql]: BEGIN SELECT COUNT(*) INTO column_exists FROM user_tab_cols WHERE table_name = UPPER('my_table') AND column_name = UPPER('col2') java.sql.SQLException: ORA-06550: line 1, column 154: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: ; Caused by: Error : 6550, Position : 153, Sql = BEGIN SELECT COUNT(*) INTO column_exists FROM user_tab_cols WHERE table_name = UPPER('my_table') AND column_name = UPPER('col2'), OriginalSql = BEGIN SELECT COUNT(*) INTO column_exists FROM user_tab_cols WHERE table_name = UPPER('my_table') AND column_name = UPPER('col2'), Error Msg = ORA-06550: line 1, column 154: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: ; 2021-08-30 18:40:01.668DEBUG [main] (ScriptUtils.java:618) - Failed to execute SQL script statement #500 of class path resource [oracle/oracleScripts.sql]: IF (column_exists = 0) THEN EXECUTE IMMEDIATE 'ALTER TABLE my_table ADD (col2 CLOB)' java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement Caused by: Error : 900, Position : 0, Sql = IF (column_exists = 0) THEN EXECUTE IMMEDIATE 'ALTER TABLE my_table ADD (col2 CLOB)', OriginalSql = IF (column_exists = 0) THEN EXECUTE IMMEDIATE 'ALTER TABLE my_table ADD (col2 CLOB)', Error Msg = ORA-00900: invalid SQL statement 2021-08-30 18:40:01.669DEBUG [main] (ScriptUtils.java:618) - Failed to execute SQL script statement #501 of class path resource [oracle/oracleScripts.sql]: EXECUTE IMMEDIATE 'UPDATE my_table SET col2 = col1' java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement Caused by: Error : 900, Position : 0, Sql = EXECUTE IMMEDIATE 'UPDATE my_table SET col2 = col1', OriginalSql = EXECUTE IMMEDIATE 'UPDATE my_table SET col2 = col1', Error Msg = ORA-00900: invalid SQL statement 2021-08-30 18:40:01.671DEBUG [main] (ScriptUtils.java:618) - Failed to execute SQL script statement #502 of class path resource [oracle/oracleScripts.sql]: END IF java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement Caused by: Error : 900, Position : 0, Sql = END IF, OriginalSql = END IF, Error Msg = ORA-00900: invalid SQL statement 2021-08-30 18:40:01.674DEBUG [main] (ScriptUtils.java:618) - Failed to execute SQL script statement #503 of class path resource [oracle/oracleScripts.sql]: END java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement Caused by: Error : 900, Position : 0, Sql = END, OriginalSql = END, Error Msg = ORA-00900: invalid SQL statement
Как автоматизировать запуск sql скриптов?
Есть папка, которая хранит в себе sql файлы для создания бд, таблиц в этой бд, импорт данных в эти таблицы.
Как автоматизировать запуск этих sql скриптов?
Через файлы с расширением sh? Или у драйвера MySQL.connect есть метод execute у которого есть функция чтения sql скриптов? Каким способ это сделать проще?
- Вопрос задан более двух лет назад
- 990 просмотров
3 комментария
Простой 3 комментария
Создание БД, таблиц и наполнение начальное — это разовое действие.
Может тебе нужно сделать что-то вроде инсталятора? Т.е. Набор скриптов (связанный), запуск которого приведет к созданию новой БД с каким-то инициирующим наполнением.
Тогда уточни для себя:
Какое поведение должно быть, если уже существует БД с таким именем?
Нужно ли задавать имя БД/таблиц, адрес сервера MySQL при «инсталяции»
Бекап старого содержимого нужен?
Denis @denislysenko Автор вопроса
Может тебе нужно сделать что-то вроде инсталятора? Т.е. Набор скриптов (связанный), запуск которого приведет к созданию новой БД с каким-то инициирующим наполнением.
—да, именно это мне и нужно

Вы это искали? https://stackoverflow.com/a/54393659
Решения вопроса 1
Сетевой и системный админ, SQL-программист.
MySQL имеет собственный встроенный планировщик (MySQL 8.0 Reference Manual / Stored Objects / . ), который может делать практически что угодно. Создаёшь Event Procedure, задаёшь периодичность выполнения — остальное сервер сделает сам. Вообще без помощи/управления со стороны.
Народ обычно любит предлагать внешние планировщики (как правило CRON) — настоятельно не рекомендую, если требующий выполнения код есть чистый SQL. Другое дело когда надо выполнять скрипты на иных языках или внешние приложения — тут да, без крона скорее всего не обойтись. Хотя и тут есть способ — подключить внешний модуль с требуемым функционалом.
Есть папка, которая хранит в себе sql файлы для создания бд, таблиц в этой бд, импорт данных в эти таблицы.
Как автоматизировать запуск этих sql скриптов?
Создание БД, таблица, начальное наполнение — это как бы одноразовое действие. Нафига их шедулить?
Ответ написан более двух лет назад
Нравится 4 3 комментария

На самом деле в вопросе ничего нету про запуск по расписанию.
Я думаю, что автор просто путается в понятиях, и ему надо все-таки выполнить единоразово, а под автоматизацией он понимает «не читать файлы/запросы по одному, а выполнить все скопом»
Роман Юрьевич Ипатьев, не исключено. ну если автор когда-нибудь появится, то авось уточнит.

Akina, да я уже раскопал. Это всё тот же горемыка, который делает тестовое по фильмам.
И ему надо отдать выполненное тестовое задание в таком виде, в котором его смогут проверить. То есть нужен какой-то код, который создаёт БД.
Но при этом сколько я сам тестовых не делал — никогда не занимался заливкой дампа. Просто прикладывал файл к заданию, в расчете на то что проверяющий и сам в состоянии его залить
И никогда замечаний по этому пункту не было
Выполнение Файлов Сохраненных Сценариев
Чтобы открыть файл сценария и вывести на экран код в области Рабочего листа SQL, выполните следующее:
- В навигаторе файлов выберите (или переместитесь к) файлу сценария, который Вы хотите открыть.
- Дважды щелкните, чтобы открыть. Код файла сценария выводится на экран в области Рабочего листа SQL.
- Выберите соединение из выпадающего списка соединений.
- Чтобы выполнить код, щелкните по значку Run Script (F5) на панели инструментов SQL worksheet. Если Вы не выбрали соединение из выпадающего списка соединений, появится диалоговое окно соединения. Выберите соединение, которое Вы хотите использовать для выполнения сценария.
Альтернативно, Вы можете также:
- Выбрать File > Open. Диалоговое окно Open выводится на экран.
- В диалоговом окне Open выберите (или переместитесь к) файлу сценария, который Вы хотите открыть.
- Щелкните по Open. Код файла сценария выводится на экран в области Рабочего листа SQL.
- Выберите соединение из выпадающего списка соединений.
- Чтобы выполнить код, щелкните по значку Run Script (F5) на панели инструментов SQL worksheet. Если Вы не выбрали соединение из выпадающего списка соединений, появится диалоговое окно соединений. Выберите соединение, которое Вы хотите использовать для выполнения сценария.
Выполнение Сохраненных Файлов Сценариев: Метод 2

Чтобы выполнить сохраненный сценарий SQL, выполните следующее:
- Используйте команду @ , сопровождая ее расположением и именем файла, который Вы хотите выполнить, в окне Enter SQL Statement.
- Щелкните по значку Run Script.
Результаты выполения файла выводятся на экран на вкладке Script Output. Можно также сохранить вывод сценария, щелкая по значку Save на вкладке Script Output. Диалоговое окно Save появляется и можно идентифицировать название и местоположение для своего файла.
Далее: Составные столбцы
