使用 sqlcmd 进行连接Connecting with sqlcmd

下载下载 ODBC 驱动程序DownloadDownload ODBC Driver

可以在 Linux 和 macOS 上结合使用 sqlcmd 实用工具与 MicrosoftMicrosoft ODBC Driver for SQL ServerSQL ServerThe sqlcmd utility is available with the MicrosoftMicrosoft ODBC Driver for SQL ServerSQL Server on Linux and macOS.

以下命令分别演示如何使用 Windows 身份验证 (Kerberos) 和 SQL ServerSQL Server 身份验证:The following commands show how to use Windows Authentication (Kerberos) and SQL ServerSQL 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:

  • -?-? 显示 sqlcmd 使用情况。Display sqlcmd usage.

  • -a 请求数据包大小。-a Request a packet size.

  • -b 如果发生错误,则终止批处理作业。-b Terminate batch job if there is an error.

  • -c batch_terminator 指定批处理终止符。-c batch_terminator Specify the batch terminator.

  • -C 信任服务器证书。-C Trust server certificate.

  • -d database_name 启动 sqlcmd 时发出 USE database_name 语句。-d database_name Issue a USE database_name statement when you start sqlcmd.

  • -D 使值传递给将解释为数据源名称 (DSN) 的 sqlcmd -S 选项。-D Causes the value passed to the sqlcmd -S option to be interpreted as a data source name (DSN). 有关详细信息,请参阅本主题末尾的“sqlcmdbcp 中的 DSN 支持”。For more information, see "DSN Support in sqlcmd and bcp" at the end of this topic.

  • -e 将输入脚本写入标准输出设备 (stdout)。-e Write input scripts to the standard output device (stdout).

  • -E 使用可信连接(集成身份验证)。有关从 Linux 或 macOS 客户端建立使用集成身份验证的可信连接的详细信息,请参阅使用集成身份验证-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] 指定输入和输出代码页。-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage] Specifies the input and output code pages. 代码页页码是指定已安装的 Linux 代码页的数值。The codepage number is a numeric value that specifies an installed Linux code page. (自 17.5.1.1 起提供)(available since 17.5.1.1)

  • -h number_of_rows 指定要在列标题之间打印的行数 。-h number_of_rows Specify the number of rows to print between the column headings.

  • -H 指定工作站名称。-H Specify a workstation name.

  • -i input_file [,input_file [,...]] 标识包含一批 SQL 语句或存储过程的文件。-i input_file[,input_file[,...]] Identify the file that contains a batch of SQL statements or stored procedures.

  • -I 将 SET QUOTED_IDENTIFIER 连接选项设置为“开”。-I Set the SET QUOTED_IDENTIFIER connection option to ON.

  • -k 删除或替换控制字符。-k Remove or replace control characters.

  • -K application_intent -Kapplication_intent
    连接到服务器时声明应用程序工作负荷类型。Declares the application workload type when connecting to a server. 目前唯一支持的值是 ReadOnlyThe only currently supported value is ReadOnly. 如果未指定 -K,sqlcmd 将不支持连接到 AlwaysOn 可用性组中的次要副本 。If -K is not specified, sqlcmd does not support connectivity to a secondary replica in an AlwaysOn availability group. 有关详细信息,请参阅 Linux 和 macOS 上的 ODBC 驱动程序 - 高可用性和灾难恢复For more information, see ODBC Driver on Linux and macOS - High Availability and Disaster Recovery.

备注

-K 在适用于 SUSE Linux 的 CTP 中不受支持。-K is not supported in the CTP for SUSE Linux. 但是,可以在传递给 sqlcmd 的 DSN 文件中指定 ApplicationIntent=ReadOnly 关键字 。You can, however, specify the ApplicationIntent=ReadOnly keyword in a DSN file passed to sqlcmd. 有关详细信息,请参阅本主题末尾的“sqlcmdbcp 中的 DSN 支持”。For more information, see "DSN Support in sqlcmd and bcp" at the end of this topic.

  • -l timeout 指定在尝试连接到服务器时 sqlcmd 登录超时时间(以秒为单位)。-l timeout Specify the number of seconds before a sqlcmd login times out when you try to connect to a server.

  • -m error_level 控制将哪些错误消息发送到 stdout 。-m error_level Control which error messages are sent to stdout.

  • -M multisubnet_failover -Mmultisubnet_failover
    在连接到 SQL Server 2012 (11.x)SQL Server 2012 (11.x) 可用性组或 SQL Server 2012 (11.x)SQL Server 2012 (11.x) 故障转移群集实例的可用性组侦听程序时,应始终指定 -MAlways specify -M when connecting to the availability group listener of a SQL Server 2012 (11.x)SQL Server 2012 (11.x) availability group or a SQL Server 2012 (11.x)SQL Server 2012 (11.x) Failover Cluster Instance. -M 将为(当前)活动服务器提供更快的故障检测和连接速度 。-M provides for faster detection of failovers and connection to the (currently) active server. 如果 -M 未指定,-M 处于关闭状态。If -M is not specified, -M is off. 有关 AlwaysOn 可用性组AlwaysOn Availability Groups的详细信息,请参阅 Linux 和 macOS 上的 ODBC 驱动程序 - 高可用性和灾难恢复For more information about AlwaysOn 可用性组AlwaysOn Availability Groups, see ODBC Driver on Linux and macOS - High Availability and Disaster Recovery.

备注

-M 在适用于 SUSE Linux 的 CTP 中不受支持。-M is not supported in the CTP for SUSE Linux. 但是,可以在传递给 sqlcmd 的 DSN 文件中指定 MultiSubnetFailover=Yes 关键字 。You can, however, specify the MultiSubnetFailover=Yes keyword in a DSN file passed to sqlcmd. 有关详细信息,请参阅本主题末尾的“sqlcmdbcp 中的 DSN 支持”。For more information, see "DSN Support in sqlcmd and bcp" at the end of this topic.

  • -N 加密连接。-N Encrypt connection.

  • -o output_file 标识从 sqlcmd 接收输出的文件 。-o output_file Identify the file that receives output from sqlcmd.

  • -p 打印每个结果集的性能统计信息。-p Print performance statistics for every result set.

  • -P 指定用户密码。-P Specify a user password.

  • -q commandline_query 在启动 sqlcmd 时执行查询,但是在查询结束运行时不退出。-q commandline_query Execute a query when sqlcmd starts, but does not exit when the query has finished running.

  • -Q commandline_query 在 sqlcmd 启动时执行查询。-Q commandline_query Execute a query when sqlcmd starts. 查询结束时,sqlcmd 将退出。sqlcmd will exit when the query finishes.

  • -r 将错误消息重定向到 stderr。-r Redirects error messages to stderr.

  • -R 使驱动程序使用客户端区域设置来将货币以及日期和时间数据转换为字符数据。-R Causes the driver to use client regional settings to convert currency and date and time data to character data. 当前仅使用 en_US(美国英语)格式设置。Currently only uses en_US (US English) formatting.

  • -s column_separator_char 指定列分隔符字符。-s column_separator_char Specify the column-separator character.

  • -S [protocol:] server[ , port]-S [protocol:] server[,port]
    指定要连接的 SQL ServerSQL Server 实例,如果使用的是 -D,则指定 DSN。Specify the instance of SQL ServerSQL Server to connect to, or if -D is used, a DSN. Linux 和 macOS 上的 ODBC 驱动程序需要 -S。The ODBC driver on Linux and macOS requires -S. 请注意,tcp 是唯一有效的协议。Note that tcp is the only valid protocol.

  • -t query_timeout 指定命令(或 SQL 语句)超时之前的秒数 。-t query_timeout Specify the number of seconds before a command (or SQL statement) times out.

  • -u 指定以 Unicode 格式存储 output_file,无需考虑 input_file 的格式。-u Specify that output_file is stored in Unicode format, regardless of the format of input_file.

  • -U login_id 指定用户登录 ID。-U login_id Specify a user login ID.

  • -V error_severity_level 控制用于设置 ERRORLEVEL 变量的严重性级别 。-V error_severity_level Control the severity level that is used to set the ERRORLEVEL variable.

  • -w column_width 指定用于输出的屏幕宽度。-w column_width Specify the screen width for output.

  • -W 删除列的尾随空格。-W Remove trailing spaces from a column.

  • -x 禁用变量替换。-x Disable variable substitution.

  • -X 禁用命令、启动脚本和环境变量。-X Disable commands, startup script, and environment variables.

  • -y variable_length_type_display_width 设置 sqlcmd 脚本变量 SQLCMDMAXFIXEDTYPEWIDTH-y variable_length_type_display_width Set the sqlcmd scripting variable SQLCMDMAXFIXEDTYPEWIDTH.

  • -Y fixed_length_type_display_width 设置 sqlcmd 脚本变量 SQLCMDMAXVARTYPEWIDTH-Y fixed_length_type_display_width Set the sqlcmd scripting variable SQLCMDMAXVARTYPEWIDTH.

可用命令Available Commands

在当前版本中,可以使用以下命令:In the current release, the following commands are available:

  • [:]!![:]!!

  • :Connect:Connect

  • :Error:Error

  • [:]EXIT[:]EXIT

  • GO [count]GO [count]

  • :Help:Help

  • :List:List

  • :Listvar:Listvar

  • :On Error:On Error

  • :Out:Out

  • :Perftrace:Perftrace

  • [:]QUIT[:]QUIT

  • :r:r

  • :RESET:RESET

  • :setvar:setvar

不可用选项Unavailable Options

在当前版本中,以下选项不可用:In the current release, the following options are not available:

  • -A 使用专用管理员连接 (DAC) 登录到 SQL ServerSQL Server-A Log in to SQL ServerSQL Server with a Dedicated Administrator Connection (DAC). 有关如何建立专用管理员连接 (DAC) 的信息,请参阅编程指南For information on how to make a dedicated administrator connection (DAC), see Programming Guidelines.

  • -L 列出本地配置的服务器计算机和在网络上播发的服务器计算机的名称。-L List the locally configured server computers, and the names of the server computers that are broadcasting on the network.

  • -v 创建可用于 sqlcmd 脚本中的 sqlcmd 脚本变量。-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. 例如,创建一个名为 a.sql 的文件(参数文件),其中包含以下内容:For example, create a file called a.sql (the parameter file) with the following content:

    :setvar ColumnName object_id  
    :setvar TableName sys.objects  

然后创建一个名为 b.sql 的文件,其中包含用于替换的参数:Then create a file called b.sql, with the parameters for replacement:

    select $(ColumnName) from $(TableName)  

在命令行下,使用以下命令将 a.sqlb.sql 合并为 c.sqlAt 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  

运行 sqlcmd 并将 c.sql 用作输入文件:Run sqlcmd and use c.sql as input file:

    sqlcmd -S<...> -P<..> -U<..> -I c.sql  
  • -z password 更改密码。-z password Change password.

  • -Z password 更改密码并退出。-Z password Change password and exit.

不可用的命令Unavailable Commands

在当前版本中,以下命令不可用:In the current release, the following commands are not available:

  • :ED:ED

  • :ServerList:ServerList

  • :XML:XML

sqlcmd 和 bcp 中的 DSN 支持DSN Support in sqlcmd and bcp

如果指定 -D,则可以在 sqlcmd 或 bcp -S 选项(或 sqlcmd :Connect 命令)中指定数据源名称 (DSN) 而不是服务器名称。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 使 sqlcmd 或 bcp 通过 -S 选项连接到 DSN 中指定的服务器。-D causes sqlcmd or bcp to connect to the server specified in the DSN by the -S option.

系统 DSN 存储在 ODBC SysConfigDir 目录的 odbc.ini 文件(即标准安装上的 /etc/odbc.ini)中。System DSNs are stored in the odbc.ini file in the ODBC SysConfigDir directory (/etc/odbc.ini on standard installations). 用户 DSN 存储在用户主目录 (~/.odbc.ini) 的 .odbc.ini 中。User DSNs are stored in .odbc.ini in a user's home directory (~/.odbc.ini).

在 Windows 系统中,系统和用户 DSN 存储在注册表中,通过 odbcad32.exe 进行管理。On Windows systems, System and User DSNs are stored in the registry and managed via odbcad32.exe. Bcp 和 sqlcmd 不支持文件 DSN。File DSNs are not supported by bcp and sqlcmd.

有关驱动程序支持的条目列表,请参阅 DSN 和连接字符串关键字和属性See DSN and Connection String Keywords and Attributes for the list of entries which the driver supports.

在 DSN 中,只有 DRIVER 项是必需的;但若要连接到远程服务器,sqlcmdbcp 需要 SERVER 元素中的值。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. 如果 SERVER 元素为空或不存在于 DSN 中,sqlcmdbcp 将尝试连接到本地系统上的默认实例。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.

在 Windows 系统上使用 bcp 时,SQL Server 2017 (14.x)SQL Server 2017 (14.x) 及更早版本需要 SQL Native Client 11 驱动程序 (sqlncli11.dll),而 SQL Server 2019 (15.x)SQL Server 2019 (15.x) 及更高版本需要 Microsoft ODBC Driver 17 for SQL Server 驱动程序 (msodbcsql17.dll)。When using bcp on Windows systems, SQL Server 2017 (14.x)SQL Server 2017 (14.x) and earlier require the SQL Native Client 11 driver (sqlncli11.dll) while SQL Server 2019 (15.x)SQL Server 2019 (15.x) and higher require the Microsoft ODBC Driver 17 for SQL Server driver (msodbcsql17.dll).

如果在 DSN 和 sqlcmdbcp 命令行中指定了相同的选项,命令行选项将替代 DSN 中使用的值。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. 例如,如果 DSN 具有 DATABASE 项且 sqlcmd 命令行包含 -d,将使用传递给 -d 的值 。For example, if the DSN has a DATABASE entry and the sqlcmd command line includes -d, the value passed to -d is used. 如果在 DSN 中指定了 Trusted_Connection=yes ,便会使用 Kerberos 身份验证,并忽略用户名 (-U ) 和密码 (-P )(若有)。If Trusted_Connection=yes is specified in the DSN, Kerberos authentication is used and user name (-U) and password (-P), if provided, are ignored.

通过定义别名 alias isql="sqlcmd -D",可将调用 isql 的现有脚本修改为使用 sqlcmdExisting scripts that invoke isql can be modified to use sqlcmd by defining the following alias: alias isql="sqlcmd -D".

另请参阅See Also

使用 bcp 连接 Connecting with bcp
发行说明Release Notes