Connecting with sqlcmd

DownloadDownload ODBC Driver

The sqlcmd utility is available with the Microsoft ODBC Driver for SQL Server on Linux and macOS.

The following commands show how to use Windows Authentication (Kerberos) and SQL Server Authentication, respectively:

sqlcmd -E -Sxxx.xxx.xxx.xxx  
sqlcmd -Sxxx.xxx.xxx.xxx -Uxxx -Pxxx  

Available Options

In the current release, the following options are available:

  • -? Display sqlcmd usage.

  • -a Request a packet size.

  • -b Terminate batch job if there is an error.

  • -c batch_terminator Specify the batch terminator.

  • -C Trust server certificate.

  • -d database_name Issue a USE database_name statement when you start sqlcmd.

  • -D Causes the value passed to the sqlcmd -S option to be interpreted as a data source name (DSN). For more information, see "DSN Support in sqlcmd and bcp" at the end of this topic.

  • -e Write input scripts to the standard output device (stdout).

  • -E Use trusted connection (integrated authentication.) For more information about making trusted connections that use integrated authentication from a Linux or macOS client, see Using Integrated Authentication.

  • -f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage] Specifies the input and output code pages. The codepage number is a numeric value that specifies an installed Linux code page. (available since 17.5.1.1)

  • -h number_of_rows Specify the number of rows to print between the column headings.

  • -H Specify a workstation name.

  • -i input_file[,input_file[,...]] Identify the file that contains a batch of SQL statements or stored procedures.

  • -I Set the SET QUOTED_IDENTIFIER connection option to ON.

  • -k Remove or replace control characters.

  • -Kapplication_intent
    Declares the application workload type when connecting to a server. The only currently supported value is ReadOnly. If -K is not specified, sqlcmd does not support connectivity to a secondary replica in an AlwaysOn availability group. For more information, see ODBC Driver on Linux and macOS - High Availability and Disaster Recovery.

Note

-K is not supported in the CTP for SUSE Linux. You can, however, specify the ApplicationIntent=ReadOnly keyword in a DSN file passed to sqlcmd. For more information, see "DSN Support in sqlcmd and bcp" at the end of this topic.

  • -l timeout Specify the number of seconds before a sqlcmd login times out when you try to connect to a server.

  • -m error_level Control which error messages are sent to stdout.

  • -Mmultisubnet_failover
    Always specify -M when connecting to the availability group listener of a SQL Server 2012 (11.x) availability group or a SQL Server 2012 (11.x) Failover Cluster Instance. -M provides for faster detection of failovers and connection to the (currently) active server. If -M is not specified, -M is off. For more information about AlwaysOn Availability Groups, see ODBC Driver on Linux and macOS - High Availability and Disaster Recovery.

Note

-M is not supported in the CTP for SUSE Linux. You can, however, specify the MultiSubnetFailover=Yes keyword in a DSN file passed to sqlcmd. For more information, see "DSN Support in sqlcmd and bcp" at the end of this topic.

  • -N Encrypt connection.

  • -o output_file Identify the file that receives output from sqlcmd.

  • -p Print performance statistics for every result set.

  • -P Specify a user password.

  • -q commandline_query Execute a query when sqlcmd starts, but does not exit when the query has finished running.

  • -Q commandline_query Execute a query when sqlcmd starts. sqlcmd will exit when the query finishes.

  • -r Redirects error messages to stderr.

  • -R Causes the driver to use client regional settings to convert currency and date and time data to character data. Currently only uses en_US (US English) formatting.

  • -s column_separator_char Specify the column-separator character.

  • -S [protocol:] server[,port]
    Specify the instance of SQL Server to connect to, or if -D is used, a DSN. The ODBC driver on Linux and macOS requires -S. Note that tcp is the only valid protocol.

  • -t query_timeout Specify the number of seconds before a command (or SQL statement) times out.

  • -u Specify that output_file is stored in Unicode format, regardless of the format of input_file.

  • -U login_id Specify a user login ID.

  • -V error_severity_level Control the severity level that is used to set the ERRORLEVEL variable.

  • -w column_width Specify the screen width for output.

  • -W Remove trailing spaces from a column.

  • -x Disable variable substitution.

  • -X Disable commands, startup script, and environment variables.

  • -y variable_length_type_display_width Set the sqlcmd scripting variable SQLCMDMAXFIXEDTYPEWIDTH.

  • -Y fixed_length_type_display_width Set the sqlcmd scripting variable SQLCMDMAXVARTYPEWIDTH.

  • -z password Change password.

  • -Z password Change password and exit.

Available Commands

In the current release, the following commands are available:

  • [:]!!

  • :Connect

  • :Error

  • [:]EXIT

  • GO [count]

  • :Help

  • :List

  • :Listvar

  • :On Error

  • :Out

  • :Perftrace

  • [:]QUIT

  • :r

  • :RESET

  • :setvar

Unavailable Options

In the current release, the following options are not available:

  • -A Log in to SQL Server with a Dedicated Administrator Connection (DAC). For information on how to make a dedicated administrator connection (DAC), see Programming Guidelines.

  • -L List the locally configured server computers, and the names of the server computers that are broadcasting on the network.

  • -v Create a sqlcmd scripting variable that can be used in a sqlcmd script.

You can use the following alternative method: Put the parameters inside one file, which you can then append to another file. This will help you use a parameter file to replace the values. For example, create a file called a.sql (the parameter file) with the following content:

    :setvar ColumnName object_id  
    :setvar TableName sys.objects  

Then create a file called b.sql, with the parameters for replacement:

    select $(ColumnName) from $(TableName)  

At the command line, combine a.sql and b.sql into c.sql using the following commands:

    cat a.sql > c.sql 
  
    cat b.sql >> c.sql  

Run sqlcmd and use c.sql as input file:

    sqlcmd -S<...> -P<..> -U<..> -I c.sql  

Unavailable Commands

In the current release, the following commands are not available:

  • :ED

  • :ServerList

  • :XML

DSN Support in sqlcmd and bcp

You can specify a data source name (DSN) instead of a server name in the sqlcmd or bcp -S option (or sqlcmd :Connect command) if you specify -D. -D causes sqlcmd or bcp to connect to the server specified in the DSN by the -S option.

System DSNs are stored in the odbc.ini file in the ODBC SysConfigDir directory (/etc/odbc.ini on standard installations). User DSNs are stored in .odbc.ini in a user's home directory (~/.odbc.ini).

On Windows systems, System and User DSNs are stored in the registry and managed via odbcad32.exe. File DSNs are not supported by bcp and sqlcmd.

See DSN and Connection String Keywords and Attributes for the list of entries which the driver supports.

In a DSN, only the DRIVER entry is required, but to connect to a remote server, sqlcmd or bcp needs a value in the SERVER element. If the SERVER element is empty or not present in the DSN, sqlcmd and bcp will attempt to connect to the default instance on the local system.

When using bcp on Windows systems, SQL Server 2017 (14.x) and earlier require the SQL Native Client 11 driver (sqlncli11.dll) while SQL Server 2019 (15.x) and higher require the Microsoft ODBC Driver 17 for SQL Server driver (msodbcsql17.dll).

If the same option is specified in both the DSN and the sqlcmd or bcp command line, the command line option overrides the value used in the DSN. For example, if the DSN has a DATABASE entry and the sqlcmd command line includes -d, the value passed to -d is used. If Trusted_Connection=yes is specified in the DSN, Kerberos authentication is used and user name (-U) and password (-P), if provided, are ignored.

Existing scripts that invoke isql can be modified to use sqlcmd by defining the following alias: alias isql="sqlcmd -D".

See Also

Connecting with bcp
Release Notes