Запуск нескольких T-SQL скриптов одним в SSMS: подробное руководство
Быстрый ответ
Если вы хотите, чтобы ваш T-SQL скрипт выполнил другой скрипт, воспользуйтесь sp_executesql
:
DECLARE @SQLContent NVARCHAR(MAX)
-- Загружаем содержимое T-SQL скрипта в переменную
SELECT @SQLContent = BulkColumn FROM OPENROWSET(BULK 'script.sql', SINGLE_BLOB) AS TSQLScript
-- Затем выполняем его
EXEC sp_executesql @SQLContent
Укажите путь к файлу 'script.sql', загрузите его содержимое и запустите. Удостоверьтесь в наличии у SQL Server пользовательских прав доступа, чтобы избежать непредсказуемых проблем.
Малоизученный путь: альтернативные методы
Скрипты как у Шекспира в режиме SQLCMD
Режим SQLCMD — отличное решение для автоматизации скриптов.
- Активируйте режим SQLCMD в SSMS для расширения своих возможностей.
- Используйте директиву
:r
для подключения внешних скриптов. - Применяйте
:setvar
для задания переменных, указывающих на пути к скриптам. - Приведите в порядок все скрипты перед их обновлением для гладкого процесса.
Как кукловод с помощью EXEC
Для динамического выполнения SQL кода применяется EXEC:
DECLARE @path NVARCHAR(256) = N'D:\Scripts\MyScript.sql',
@SQL NVARCHAR(MAX)
SELECT @SQL = BulkColumn
FROM OPENROWSET(BULK @path, SINGLE_BLOB) AS script
EXEC(@SQL)
OPENROWSET
способствует прочтению содержимого скриптов.
Овладение хаосом: организованные скрипты
Для упорядоченной работы со скриптами советую:
- Хранить их в отдельных папках.
- Использовать систему контроля версий.
- Сортировать скрипты по папкам в зависимости от среды исполнения.
Бери, устанавливай, получай (скрипты)! – вызовы скриптования
При работе с вызовами скриптов:
- Если это целесообразно, используйте
XP_CMDSHELL
. - Будьте аккуратны с правами доступа при работе с файлами скриптов.
- Используйте TRY/CATCH блоки для предотвращения ошибок.
- Для отладки сложных случаев примените
PRINT
.
Визуализация
Процесс можно описать следующим образом:
🚂 Главный SQL-скрипт == главный герой
🔀 (EXEC sp_executesql N'script') == неожиданный поворот событий
🛤️ Второй T-SQL скрипт == новые испытания
Тракектория героя 🚂💨
|
🔀------ Сюжетный поворот
|
🛤️🚂💨 Приключения продолжаются
Примечание: EXEC sp_executesql
— это маньявр, способный кардинально изменить течение выполнения скрипта, это как встреча героя со своим вызовом. 😉
Шерлоково руководство по тайнам SQL
Автоматизация в стиле Трансформеров
Для автоматизации рутинных операций используйте храненные процедуры.
CREATE PROCEDURE RunMyScript AS
BEGIN
-- Запускаем свои регулярные задачи на автопилоте.
END
Вы можете запускать их через SQL Server Agent или вручную по потребности.
Проникновение в суть T-SQL с отладкой
Для проверки динамического SQL используйте PRINT
перед EXEC
:
PRINT @SQL -- Проверяем и понимаем, что будет выполнено
EXEC(@SQL)
Так вы обеспечиваете безопасное и уверенное выполнение кода.
Использование курсоров для пошагового выполнения
Для запуска серии SQL скриптов в определенной последовательности:
DECLARE curScripts CURSOR FOR
SELECT scriptPath FROM MyScripts WHERE condition ORDER BY sequenceNo
OPEN curScripts
FETCH NEXT FROM curScripts INTO @path
WHILE @@FETCH_STATUS = 0
BEGIN
-- Загружаем и выполняем каждый скрипт по порядку
END
CLOSE curScripts
DEALLOCATE curScripts
Такой подход обеспечивает последовательное выполнение скриптов.
Полезные материалы
- sp_executesql (Transact-SQL) – SQL Server | Microsoft Learn – официальная документация, посвященная использованию sp_executesql для динамического выполнения операторов T-SQL.
- SQL Server Management Studio SQLCMD mode option – подробное руководство по работе с SQLCMD.
- Just a moment... – обсуждение на Stack Overflow о выполнении динамического SQL с параметрами вывода.
- Just a moment... – дебаты о методах запуска .sql файлов при помощи T-SQL.