Запуск нескольких T-SQL скриптов одним в SSMS: подробное руководство

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вы хотите, чтобы ваш T-SQL скрипт выполнил другой скрипт, воспользуйтесь sp_executesql:

SQL
Скопировать код
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 пользовательских прав доступа, чтобы избежать непредсказуемых проблем.

Кинга Идем в IT: пошаговый план для смены профессии

Малоизученный путь: альтернативные методы

Скрипты как у Шекспира в режиме SQLCMD

Режим SQLCMD — отличное решение для автоматизации скриптов.

  • Активируйте режим SQLCMD в SSMS для расширения своих возможностей.
  • Используйте директиву :r для подключения внешних скриптов.
  • Применяйте :setvar для задания переменных, указывающих на пути к скриптам.
  • Приведите в порядок все скрипты перед их обновлением для гладкого процесса.

Как кукловод с помощью EXEC

Для динамического выполнения SQL кода применяется EXEC:

SQL
Скопировать код
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.

Визуализация

Процесс можно описать следующим образом:

Markdown
Скопировать код
🚂 Главный SQL-скрипт == главный герой
🔀 (EXEC sp_executesql N'script') == неожиданный поворот событий
🛤️ Второй T-SQL скрипт == новые испытания
Тракектория героя 🚂💨
       |
    🔀------ Сюжетный поворот
       |
     🛤️🚂💨 Приключения продолжаются

Примечание: EXEC sp_executesql — это маньявр, способный кардинально изменить течение выполнения скрипта, это как встреча героя со своим вызовом. 😉

Шерлоково руководство по тайнам SQL

Автоматизация в стиле Трансформеров

Для автоматизации рутинных операций используйте храненные процедуры.

SQL
Скопировать код
CREATE PROCEDURE RunMyScript AS
BEGIN
    -- Запускаем свои регулярные задачи на автопилоте.
END

Вы можете запускать их через SQL Server Agent или вручную по потребности.

Проникновение в суть T-SQL с отладкой

Для проверки динамического SQL используйте PRINT перед EXEC:

SQL
Скопировать код
PRINT @SQL  -- Проверяем и понимаем, что будет выполнено
EXEC(@SQL)

Так вы обеспечиваете безопасное и уверенное выполнение кода.

Использование курсоров для пошагового выполнения

Для запуска серии 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

Такой подход обеспечивает последовательное выполнение скриптов.

Полезные материалы

  1. sp_executesql (Transact-SQL) – SQL Server | Microsoft Learn – официальная документация, посвященная использованию sp_executesql для динамического выполнения операторов T-SQL.
  2. SQL Server Management Studio SQLCMD mode option – подробное руководство по работе с SQLCMD.
  3. Just a moment... – обсуждение на Stack Overflow о выполнении динамического SQL с параметрами вывода.
  4. Just a moment... – дебаты о методах запуска .sql файлов при помощи T-SQL.