前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sqlcmd的使用

sqlcmd的使用

原创
作者头像
保持热爱奔赴山海
发布2024-08-29 15:01:44
1140
发布2024-08-29 15:01:44
举报
文章被收录于专栏:数据库相关

官方文档 https://learn.microsoft.com/zh-cn/sql/tools/sqlcmd/sqlcmd-utility?view=sql-server-ver16&tabs=go%2Cwindows&pivots=cs1-bash

sqlcmd 有两个版本:

1 基于 go-mssqldb 的 sqlcmd,有时样式为 go-sqlcmd。 此版本是可以独立于 SQL Server 下载的独立工具。

go版本的项目仓库 https://github.com/microsoft/go-sqlcmd

2 基于 ODBC 的 sqlcmd,可用于 SQL Server 或 Microsoft 命令行实用程序,以及 Linux 上 mssql-tools 包的一部分。

下面内容中演示的是基于 ODBC 的 sqlcmd。另一种go版本的使用方法差不多,参考官方文档即可。

环境:centos7.9 x64

安装sqlcmd命令行工具

代码语言:txt
复制
vim /etc/yum.repos.d/microsoft-prod.repo
[packages-microsoft-com-prod]
name=packages-microsoft-com-prod
baseurl=https://packages.microsoft.com/rhel/7/prod/
enabled=1
gpgcheck=0



yum install mssql-tools.x86_64 -y

安装过程中需要输入2次的YES确认

安装完成后,sqlcmd的文件路径为 /opt/mssql-tools/bin/sqlcmd

将 /opt/mssql-tools/bin/sqlcmd 加到环境变量里面

命令参数

代码语言:txt
复制
$ sqlcmd "-?"
Microsoft (R) SQL Server Command Line Tool
Version 17.10.0001.1 Linux
Copyright (C) 2017 Microsoft Corporation. All rights reserved.

sqlcmd
   -a packet_size   # 介于 512 和 32767 之间的值。 默认为 4096。 如果脚本的两个 GO 命令之间包含大量 Transact-SQL 语句,则使用较大的数据包可以提高脚本执行的性能。 你可以请求更大的包大小。 但是,如果请求遭拒绝, sqlcmd 将对包大小使用服务器默认值。

   -A (dedicated administrator connection)
   -b (terminate batch job if there is an error)
   -c batch_terminator
   -C (trust the server certificate)
   -d db_name
   -D
   -e (echo input)
   -E (use trusted connection)
   -f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
   -g (enable column encryption)
   -G (use Azure Active Directory for authentication)
   -h rows_per_header
   -H workstation_name
   -i input_file
   -I (enable quoted identifiers)
   -j (Print raw error messages)
   -k[1 | 2] (remove or replace control characters)
   -K application_intent
   -l login_timeout
   -L[c] (list servers, optional clean output)
   -m error_level
   -M multisubnet_failover   # 在连接到 SQL Server 可用性组或 SQL Server 故障转移群集实例的可用性组侦听程序时,应始终指定 -M。 -M 将为(当前)活动服务器提供更快的检测和连接。 如果未指定 -M,则 -M 处于关闭状态。 有关详细信息,请参阅侦听程序、客户端连接、应用程序故障转移、创建和配置可用性组 (SQL Server)、故障转移群集和 AlwaysOn 可用性组 (SQL Server) 和活动次要副本:可读次要副本(AlwaysOn 可用性组)。


   -N (encrypt connection)
   -o output_file
   -p[1] (print statistics, optional colon format)
   -P password  # 密码
   -q "cmdline query"  # 查询sql明细,查询结束不退出命令行
   -Q "cmdline query" (and exit)   # 查询sql明细,查询结束自动退出命令行
   -r[0 | 1] (msgs to stderr)
   -R (use client regional settings)
   -s col_separator  # 指定列分隔符字符。 默认为空格。 此选项设置 sqlcmd 脚本变量 SQLCMDCOLSEP。 若要使用对操作系统有特殊含义的字符,如“与”符号 (&) 或分号 (;),请将该字符用双引号 (") 引起来。 列分隔符可以是任意 8 位字符。

   -S [protocol:]server[instance_name][,port]   # 连接地址串
   -t query_timeout
   -u (unicode output file)
   -U login_id
   -v var = "value"  # 创建可在 sqlcmd 脚本中使用的 sqlcmd 脚本变量
   -V error_severity_level
   -w screen_width   # 指定用于输出的屏幕宽度。 此选项设置 sqlcmd 脚本变量 SQLCMDCOLWIDTH。 该列宽必须是介于 8 和 65536 之间的数字。 如果指定的列宽不在此范围内,sqlcmd 就会生成错误消息。 默认宽度为 80 个字符。 在输出行超出指定的列宽时,将转到下一行。

   -W (remove trailing spaces)  # 此选项删除列的尾随空格。 在准备要导出到另一应用程序的数据时,请将此选项和 -s 选项一起使用。 不能与 -y 或 -Y 选项一起使用。

   -x (disable variable substitution)  # 导致 sqlcmd 忽略脚本变量。 如果脚本中包含多个 INSERT 语句,且这些语句可能包含格式与常规变量(如 $(<variable_name>))相同的字符串,就会发现此参数很有用。
   
   -X[1] (disable commands, startup script, environment variables, optional exit)
   -y variable_length_type_display_width
   -Y fixed_length_type_display_width
   -z new_password
   -Z new_password (and exit)
   -? (usage)


sqlcmd 暂不要求在命令行选项和值之间使用空格。 不过,在今后推出的版本中,可能会要求在命令行选项和值之间必须有空格。

例子

代码语言:txt
复制

执行存储过程
	$ echo "exec Gettb2Id @a=22;" | sqlcmd -S 192.168.31.181,1433 -U SA -P'Abcd1234' -d sbtest
	$ echo "EXEC dbo.RoutineDemo @FID = '1111', @EmpID = 222;" |sqlcmd -S 192.168.31.181,1433 -U SA -P'Abcd1234' -d sbtest
	$ echo "EXEC dbo.sp_who_lock;" | sqlcmd -S 192.168.31.181,1433 -U SA -P'Abcd1234' -d sbtest


读取文件中的内容然后执行,可以接多个文件
	使用-i参数
	$ cat a.sql
	exec Gettb2Id @a=22;
	$ cat b.sql
	exec Gettb2Id @a=222;

	$ sqlcmd -S 192.168.31.181,2433 -U SA -P'Abcd1234' -d sbtest -i a.sql -i b.sql


将结果输出到文件
	使用-o参数
	$ sqlcmd -S 192.168.31.181,2433 -U SA -P'Abcd1234' -d sbtest -i a.sql -i b.sql -o a.out


查询结束后不退出命令行界面【不推荐使用这种】
	-q参数
	$ sqlcmd -S 192.168.31.181,2433 -U SA -P'Abcd1234' -d AdventureWorks2019 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

	$ sqlcmd -S 192.168.31.181,2433 -U SA -P'Abcd1234'  -d AdventureWorks2019 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

	请不要在查询中使用 GO 终止符。
	如果在指定此选项的同时还指定了 -b , sqlcmd 在遇到错误时将退出。 -b 将在本文其他部分进行介绍。


查询结束后不退出命令行界面【推荐使用这种】
	-Q参数
	$ sqlcmd -S 192.168.31.181,2433 -U SA -P'Abcd1234' -d AdventureWorks2019 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"

	$ sqlcmd -S 192.168.31.181,2433 -U SA -P'Abcd1234'  -d AdventureWorks2019 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
	或者 $ echo 'SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;' |sqlcmd -S 192.168.31.181,2433 -U SA -P'Abcd1234' -d AdventureWorks2019

	请不要在查询中使用 GO 终止符。
	如果在指定此选项的同时还指定了 -b , sqlcmd 在遇到错误时将退出。 -b 将在本文其他部分进行介绍。

	
	
限制查询超时时间【推荐使用】
	-t参数, 如果未指定 query_timeout 值,则命令不会超时。query_timeout 必须是介于 1 和 65534 之间的数字
	$ sqlcmd -S 192.168.31.181,2433 -U SA -P'Abcd1234' -d AdventureWorks2019 -t 10 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"



输出每个结果集的性能统计信息
	-p参数
	$ sqlcmd -S 192.168.31.181,2433 -U SA -P'Abcd1234' -d AdventureWorks2019 -t 10 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';" -p
	会在结果的最下面添加类似如下3行内容:
	Network packet size (bytes): 4096
	1 xact[s]:  --> 这里表示1个事务
	Clock Time (ms.): total        15  avg   15.0 (66.7 xacts per sec.)  --> 所有事务的总时间。 单个事务的平均时间。 每秒平均事务数。


执行的时候,先输出input的内容
	$ sqlcmd -S 192.168.31.181,2433 -U SA -P'Abcd1234'  -d AdventureWorks2019 -Q "SELECT TOP 5 FirstName FROM Person.Person; SELECT TOP 5 LastName FROM Person.Person;" -e

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装sqlcmd命令行工具
  • 命令参数
  • 例子
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档