Выполнение 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 и SQL Server Compact, как например:

gsqlcmd exec test.db install.sql

gsqlcmd exec test.sdf install.sql

Использование переменных в сценариях SQL

Вы можете определить значения параметров для команд и сценариев SQL, используя опцию /set.

Например:

gsqlcmd exec db "EXEC dbo.usp_test @param1, @param2" /set=Param1=123;Param2='abc'

Объявляйте параметры сценария как @<Parameter> для Microsoft SQL Server, SQL Server Compact и SQLite,
и как :<Parameter> для MySQL, MariaDB, Oracle Database, IBM DB2, NuoDB, 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.