Executing Scripts with gsqlcmd

Executing Scripts with gsqlcmd

gsqlcmd supports executing native SQL scripts for any supported database platform.

Use the exec mode in the following form:

gsqlcmd [exec] <connection> [<input> [<output>]]

where input:

<query> | <file> | <mask> | @[<task>] | <command> | <table> | <view>

Here are several examples:

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

You can use a file name for SQLite and SQL Server Compact databases like

gsqlcmd exec test.db install.sql

gsqlcmd exec test.sdf install.sql

Using Variables in SQL Scripts

You can define parameter values for SQL commands and scripts using the /set option.

For example:

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

Declare script parameters as @<Parameter> for Microsoft SQL Server, SQL Server Compact, and SQLite,
and as :<Parameter> for MySQL, MariaDB, Oracle Database, IBM DB2, NuoDB, Snowflake, and PostgreSQL.

Do not use the /set option with scripts that declare variables calculated by database servers.
For example, do not use the /set option to create stored procedures and triggers.

You can load script variables from task files.

For example, task.txt has the following content:

P1 P2
1  2
1  3

The test script.sql contains the following content:

SELECT @p1, '+', @p2, '=', @p1 + @p2

So, the following command produces the following result:

gsqlcmd exec master script.sql /taskfile=task.txt /noHeaders

1 + 2 = 3
1 + 3 = 4

As you can see, gsqlcmd executes the script for each line of the task file.

gsqlcmd Enterprise allows getting task values from a database using the <connection>::<query> form.

So, you can execute scripts with parameters values from a database like

gsqlcmd exec master script.sql "/taskfile=master::SELECT p1, p2 FROM ..." /noHeaders

Internal Script Commands

SQL scripts can contain the -- print <Message> commands.

For example:

-- print Table ColumnTranslation created

gsqlcmd executes such commands internally and writes messages to the output.

This feature works with all database servers in the same manner even a server does not support print commands.

Transaction Modes

gsqlcmd executes SQL commands in the ReadCommitted transaction isolation level.

So, the default rule is "all or nothing."

You can turn off a transaction mode using the /noTransaction option.

You can use this, for example, for deleting database objects using scripts, as some of the deleted objects can not exist.

Trace Mode

If a script has errors, turn on the trace mode using the /trace option.

By default, gsqlcmd writes trace messages to the console.

You can redirect the trace messages to a log file using the gsqlcmd.exe.config configuration file.