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