Выполнение SQL-скриптов

Выполнение 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.

Этот веб-сайт использует куки. Продолжая использовать веб-сайт, Вы принимаете условия Политики защиты персональных данных.