Выполнение SQL-скриптов
gsqlcmd поддерживает выполнение SQL-скриптов для всех поддерживаемых платформ баз данных.
Используйте режим exec в следующем формате:
gsqlcmd [exec] <connection> [<input> [<output>]]
где <input>
может быть:
<query> | <file> | <mask> | @[<task>] | <command> | <table> | <view>
Вот несколько примеров использования:
gsqlcmd exec db install.sql gsqlcmd exec db install.sql result.txt gsqlcmd exec db install.sql.gz gsqlcmd exec db install-*.sql gsqlcmd exec db install.zip gsqlcmd exec db @install-task.txt
Для SQLite вы можете использовать имя файла базы данных, например:
gsqlcmd exec test.db install.sql
Использование переменных в сценариях SQL
Вы можете задавать значения параметров для команд и SQL-скриптов с помощью опции /set.
Например:
gsqlcmd exec db "EXEC dbo.usp_test @param1, @param2" /set=Param1=123;Param2='abc'
Объявляйте параметры скрипта как @<Parameter>
для Microsoft SQL Server и SQLite, и как :<Parameter>
для MySQL, MariaDB, Oracle Database, Snowflake и PostgreSQL.
Не используйте параметр /set в сценариях, где объявляются переменные, вычисляемые на стороне сервера баз данных. Например, не применяйте /set при создании хранимых процедур и триггеров.
Вы можете определять переменные скриптов в файлах задач.
Например, файл task.txt
может содержать следующие строки:
P1 P2 1 2 1 3
Тестовый файл script.sql
может содержать следующее определение:
SELECT @p1, '+', @p2, '=', @p1 + @p2
Следующая команда выдаст следующий результат:
gsqlcmd exec master script.sql /taskfile=task.txt /noHeaders 1 + 2 = 3 1 + 3 = 4
Этот пример показывает, что gsqlcmd выполняет скрипт для каждой строки файла задач.
gsqlcmd Enterprise позволяет получать значения вместо файлов задач непосредственно из базы данных в формате <connection>::<query>
.
Это позволяет выполнять сценарии с параметрами, полученными из базы данных, например:
gsqlcmd exec master script.sql "/taskfile=master::SELECT p1, p2 FROM ..." /noHeaders
Внутренние команды скрипта
SQL-скрипты могут содержать команды -- print <Message>.
Например:
-- print Table ColumnTranslation created
gsqlcmd выполняет такие команды без обращения к серверу и выводит текст сообщения.
Эта функция работает одинаково на всех серверах баз данных, даже если сервер не поддерживает команды типа print или echo.
Режим транзакций
gsqlcmd выполняет SQL-команды в транзакциях с уровнем изоляции ReadCommitted.
По умолчанию применяется правило "все или ничего".
Вы можете отключить режим транзакций с помощью опции /noTransaction.
Это может быть полезно, например, для удаления объектов базы данных с помощью скриптов, так как некоторые из удаляемых объектов могут уже не существовать.
Режим трассировки
Если в скрипте возникают ошибки, включите режим трассировки с помощью опции /trace.
По умолчанию gsqlcmd выводит сообщения трассировки на консоль.
Вы можете перенаправить сообщения трассировки в файл журнала с помощью файла конфигурации gsqlcmd.exe.config
.