Overview #
After recent updates to the mssql-tools package, users may experience unexpected behavior when executing queries with sqlcmd. A typical command example:
/usr/local/relianoid/app/libexec/sqlcmd -S <SERVER IP ADDRESS> -U <DB USER> -P <DB PASSWORD> -Q "select count(*) from TABLE_0;"
In some cases, query errors are not properly returned as command failures, which can impact scripts, automation, or monitoring processes (such as farmguardian health checks) relying on exit codes.
Cause #
This issue is due to a behavior change in the sqlcmd utility, included in the mssql-tools package.
By default, sqlcmd:
- Outputs SQL errors to standard output (stdout)
- Does not return a non-zero exit code when a query fails
This means that even if the SQL query encounters an error, the command may still appear as successful from a scripting perspective.
Solution #
To ensure that SQL query errors are properly handled and returned as command failures, include the -b parameter in the sqlcmd command.
Updated command:
/usr/local/relianoid/app/libexec/sqlcmd -b -S <SERVER IP ADDRESS> -U <DB USER> -P <DB PASSWORD> -Q "select count(*) from TABLE_0;"
How It Works #
The -b option modifies sqlcmd behavior as follows:
- Causes
sqlcmdto exit with a non-zero status code if an error occurs - Sends error messages to standard error (stderr) instead of standard output
- Enables proper error detection in scripts and automation tools
Why This Matters #
Without the -b flag:
- Monitoring systems may not detect failed queries
- Automation scripts may continue execution despite errors
- Troubleshooting becomes more difficult due to misleading success states
By adding -b, you ensure:
- Accurate error handling
- Reliable scripting behavior
- Proper integration with system monitoring and alerting
Additional Notes #
- This behavior is specific to the
sqlcmdtool from the mssql-tools package - Existing scripts should be reviewed and updated accordingly
- No changes are required on the SQL Server side
Summary #
A change in sqlcmd behavior may prevent SQL errors from being properly reported. Adding the -b parameter ensures that query failures are correctly propagated via exit codes and error output, maintaining reliable automation and monitoring.