合 SQL Server客户端命令行工具sqlcmd和osql
Tags: MSSQLSQL Server命令行工具客户端命令行sqlcmdosql
- sqlcmd概述
- 下载最新版本的 sqlcmd 实用工具
- 在 Linux 上安装 sqlcmd 和 bcp SQL Server 命令行工具
- 在 RHEL 8 上安装工具
- 在 Ubuntu 16.04 上安装工具
- 在 SLES 12 上安装工具
- 在 macOS 上安装工具
- Docker
- 脱机安装
- 语法
- 命令行选项
- 备注
- 变量优先级(从低到高)
- sqlcmd 脚本变量
- sqlcmd 命令
- sqlcmd 文件名
- 信息性消息
- Transact-SQL 查询的输出格式
- XML 输出格式
- JSON 输出格式
- 使用 Azure Active Directory 身份验证
- sqlcmd 最佳方法
- 其它内容
- 语法
- 参数
- 备注
- OSQL 命令
- 以交互方式使用 osql
- 插入注释
- 使用 EXIT 返回 osql 中的结果
- 显示 Money 和 Smallmoney 数据类型
sqlcmd实用工具
sqlcmd概述
参考:
https://docs.microsoft.com/zh-cn/sql/tools/sqlcmd-utility?view=sql-server-ver15
有关 SQL Server 2014 及更低版本的信息,请参阅 sqlcmd 实用工具。
有关在 Linux 上使用 sqlcmd 的信息,请参阅在 Linux 上安装 sqlcmd 和 bcp。
可以通过各种可用模式,使用 sqlcmd 实用工具输入 Transact-SQL 语句、系统过程和脚本文件:
- 通过命令提示符。
- 在查询编辑器中的 SQLCMD 模式下。
- 在 Windows 脚本文件中。
- 在 SQL Server 代理作业的操作系统 (Cmd.exe) 作业步骤中。
此实用工具使用 ODBC 执行 Transact-SQL 批处理。
下载最新版本的 sqlcmd 实用工具
下载 Microsoft Command Line Utilities 15 for SQL Server (x64) (2.6 MB)
下载 Microsoft Command Line Utilities 15 for SQL Server (x86) (2.3 MB)
命令行工具为公开发行版 (GA),但与 SQL Server 2019 (15.x) 的安装程序包一起发布。
版本信息
版本号:15.0.2
生成号:15.0.2000.5
发行日期:2020 年 9 月 11 日
新版本的 SQLCMD 支持 Azure AD 身份验证,包括对 SQL 数据库、Azure Synapse Analytics 和 Always Encrypted 功能的多重身份验证 (MFA) 支持。 新 BCP 支持 Azure AD 身份验证,包括对 SQL 数据库和 Azure Synapse Analytics 的多重身份验证 (MFA) 支持。
系统要求 Windows 10、Windows 7、Windows 8、Windows 8.1、Windows Server 2008 - 2019。
此组件要求具有内置 Windows Installer 5 和 Microsoft ODBC Driver 17 for SQL Server。
若要查看 SQLCMD 版本,请执行 sqlcmd -?
命令,并确认使用的是版本 15.0.2000.5 或更高版本。
备注
需要版本 13.1 或更高版本才支持 Always Encrypted (-g
) 和 Azure Active Directory 身份验证 (-G
)。 (你的计算机上可能已安装多个版本的 sqlcmd.exe。 请确保使用正确的版本。 若要确定版本,请执行 sqlcmd -?
。)
可以从 Azure Cloud Shell 中尝试使用 sqlcmd 实用工具,因为它在默认情况下已预安装:
若要在 SSMS 中运行 sqlcmd 语句,请从顶部导航栏上的“查询菜单”下拉列表中选择“SQLCMD 模式”。
重要
在“查询编辑器”的常规模式和 SQLCMD 模式下,SQL Server Management Studio (SSMS) 使用 Microsoft .NET Framework SqlClient 执行操作。 通过命令行运行 sqlcmd 时,sqlcmd 使用 ODBC 驱动程序。 由于可以应用不同的默认选项,因此在 SQL Server Management Studio SQLCMD 模式下以及在 sqlcmd 实用工具中执行相同的查询时,可能会看到不同的行为。
sqlcmd 暂不要求在命令行选项和值之间使用空格。 不过,在今后推出的版本中,可能会要求在命令行选项和值之间必须有空格。
其他主题:
在 Linux 上安装 sqlcmd 和 bcp SQL Server 命令行工具
参考:https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup-tools?view=sql-server-ver15
通过以下步骤安装命令行工具、Microsoft ODBC 驱动程序及其依赖项。 mssql-tools 包包含:
- sqlcmd:命令行查询实用工具。
- bcp:批量导入-导出实用工具。
为你的平台安装工具:
在 RHEL 8 上安装工具
通过以下步骤在 Red Hat Enterprise Linux 上安装 mssql-tools。
进入超级用户模式。
1sudo su下载 Microsoft Red Hat 存储库配置文件。
123456-- rhel 8curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/msprod.repo-- rhel 7curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo退出超级用户模式。
1exit如果安装了早期版本的 mssql-tools,请删除所有旧的 unixODBC 包。
1sudo yum remove mssql-tools unixODBC-utf16-devel运行以下命令,以使用 unixODBC 开发人员包安装 mssql-tools。
1sudo yum install mssql-tools unixODBC-devel备注
若要将 mssql-tools 更新至最新版本,请运行以下命令:
12sudo yum check-updatesudo yum update mssql-tools可选:向 bash shell 中的 PATH 环境变量添加
/opt/mssql-tools/bin/
。要使 sqlcmd/bcp 能从登陆会话的 bash shell 进行访问,请使用下列命令修改 ~/.bash_profile 文件中的 PATH :
Bash复制
1echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile要使 sqlcmd/bcp 能从交互式/非登录会话的 bash shell 进行访问,请使用下列命令修改 ~/.bashrc 文件中的 PATH :
12echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrcsource ~/.bashrc
在 Ubuntu 16.04 上安装工具
通过以下步骤在 Ubuntu 上安装 mssql-tools。
备注
- 从 SQL Server 2019 CU3 开始,支持 Ubuntu 18.04。
- 自 SQL Server 2019 CU10 起,开始支持 Ubuntu 20.04。
- 如果你使用的是 Ubuntu 18.04 或 Ubuntu 20.04,请将下面步骤 2 中的存储库路径从
/ubuntu/16.04
更改为/ubuntu/18.04
或/ubuntu/20.04
。
导入公共存储库 GPG 密钥。
Bash复制
1curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -注册 Microsoft Ubuntu 存储库。
Bash复制
1curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list更新源列表,并使用 unixODBC 开发人员包运行安装命令。
Bash复制
12sudo apt-get updatesudo apt-get install mssql-tools unixodbc-dev备注
若要将 mssql-tools 更新至最新版本,请运行以下命令:
Bash复制
12sudo apt-get updatesudo apt-get install mssql-tools可选:向 bash shell 中的 PATH 环境变量添加
/opt/mssql-tools/bin/
。要使 sqlcmd/bcp 能从登陆会话的 bash shell 进行访问,请使用下列命令修改 ~/.bash_profile 文件中的 PATH :
Bash复制
1echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile要使 sqlcmd/bcp 能从交互式/非登录会话的 bash shell 进行访问,请使用下列命令修改 ~/.bashrc 文件中的 PATH :
Bash复制
12echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrcsource ~/.bashrc
在 SLES 12 上安装工具
通过以下步骤在 SUSE Linux Enterprise Server 上安装 mssql-tools。
将 Microsoft SQL Server 存储库添加到 Zypper。
Bash复制
12sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/prod.reposudo zypper --gpg-auto-import-keys refresh使用 unixODBC 开发人员包安装 mssql-tools。
Bash复制
1sudo zypper install mssql-tools unixODBC-devel备注
若要将 mssql-tools 更新至最新版本,请运行以下命令:
Bash复制
12sudo zypper refreshsudo zypper update mssql-tools可选:向 bash shell 中的 PATH 环境变量添加
/opt/mssql-tools/bin/
。要使 sqlcmd/bcp 能从登陆会话的 bash shell 进行访问,请使用下列命令修改 ~/.bash_profile 文件中的 PATH :
Bash复制
1echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile要使 sqlcmd/bcp 能从交互式/非登录会话的 bash shell 进行访问,请使用下列命令修改 ~/.bashrc 文件中的 PATH :
Bash复制
12echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrcsource ~/.bashrc
在 macOS 上安装工具
macOS 上目前提供 sqlcmd 和 bcp 的预览版。 有关详细信息,请参阅公告。
如果尚未安装 Homebrew,请进行安装:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
若要为 Mac El Capitan 和 Sierra 安装工具,请使用以下命令:
Bash复制
1 2 3 4 5 6 | # brew untap microsoft/mssql-preview if you installed the preview version brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release brew update brew install mssql-tools #for silent install: #HOMEBREW_NO_ENV_FILTERING=1 ACCEPT_EULA=y brew install mssql-tools |
Docker
如果在 Docker 容器中运行 SQL Server,则 SQL Server 命令行工具已包含在 SQL Server Linux 容器映像中。 如果使用交互式 bash shell 附加到正在运行的容器,则可以在本地运行这些工具。
脱机安装
如果 Linux 计算机不能访问之前部分中使用的在线存储库,则可以直接下载包文件。 这些包位于 Microsoft 存储库中,网址为 https://packages.microsoft.com。
提示
如果通过之前部分中的步骤成功安装了包,则无需下载或者手动安装以下包。 这仅适用于脱机的情况。
首先,找到并复制适用于你的 Linux 分发版的 mssql-tools 包:
Linux 分发版 mssql-tools 包位置 Red Hat https://packages.microsoft.com/rhel/7.3/prod SLES https://packages.microsoft.com/sles/12/prod Ubuntu 16.04 https://packages.microsoft.com/ubuntu/16.04/prod/pool/main/m/mssql-tools 此外,找到并复制 msodbcsql 包,它是一个依赖项。 msodbcsql 包对 unixODBC-devel(Red Hat 和 SLES)或 unixodbc-dev (Ubuntu) 也具有依赖项。 下表列出了 msodbcsql 包的所在位置:
Linux 分发版 ODBC 包位置 Red Hat https://packages.microsoft.com/rhel/8/prod SLES https://packages.microsoft.com/sles/12/prod Ubuntu 16.04 msodbcsql unixodbc-dev 将下载的包移至 Linux 计算机。 如果使用了不同的计算机下载包,则可以通过“scp”命令将包移至你的 Linux 计算机。
安装包:安装 mssql-tools 和 msodbc 包。 如果遇到任何依赖项错误,请忽略,直到出现下一步操作。
平台 包安装命令 Red Hat sudo yum localinstall msodbcsql-<version>.rpm
sudo yum localinstall mssql-tools-<version>.rpm
SLES sudo zypper install msodbcsql-<version>.rpm
sudo zypper install mssql-tools-<version>.rpm
Ubuntu sudo dpkg -i msodbcsql_<version>.deb
sudo dpkg -i mssql-tools_<version>.deb
解决缺少依赖项的问题:此时可能会出现缺少依赖项的情况。 如果没有,可以跳过此步骤。 在某些情况下,必须手动查找并安装这些依赖项。
对于 RPM 包,可通过以下命令检查必需的依赖项:
Bash复制
12rpm -qpR msodbcsql-<version>.rpmrpm -qpR mssql-tools-<version>.rpm对于 Debian 包,如果能够访问包含这些依赖项的已批准存储库,则最简单的解决办法是使用 apt-get 命令:
Bash复制
1sudo apt-get -f install备注
此命令还会完成 SQL Server 包的安装。
如果此命令对 Debian 包不起作用,可通过以下命令检查必需的依赖项:
Bash复制
12dpkg -I msodbcsql_<version>_amd64.deb | grep "Depends:"dpkg -I mssql-tools_<version>_amd64.deb | grep "Depends:"
语法
cmd复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | sqlcmd -a packet_size -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 -N (encrypt connection) -o output_file -p[1] (print statistics, optional colon format) -P password -q "cmdline query" -Q "cmdline query" (and exit) -r[0 | 1] (msgs to stderr) -R (use client regional settings) -s col_separator -S [protocol:]server[instance_name][,port] -t query_timeout -u (unicode output file) -U login_id -v var = "value" -V error_severity_level -w column_width -W (remove trailing spaces) -x (disable variable substitution) -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) |
命令行选项
登录相关选项
-A
使用专用管理员连接 (DAC) 登录 SQL Server。 此类型连接用于排除服务器故障。 此连接只适用于支持 DAC 的服务器计算机。 如果 DAC 不可用,sqlcmd 会生成错误消息并退出。 有关 DAC 的详细信息,请参阅 用于数据库管理员的诊断连接。 不支持同时使用 -A 选项和 -G 选项。 使用 -A 连接到 SQL 数据库时,你必须是 SQL Server 管理员。 DAC 不适用于 Azure Active Directory 管理员。
-C
该开关供客户端用于将其配置为隐式表示信任服务器证书且无需验证。 此选项等同于 ADO.NET 选项 TRUSTSERVERCERTIFICATE = true
。
-d db_name
在你启动 sqlcmd 时,此选项发出一个 USE
db_name 语句。 此选项设置 sqlcmd 脚本变量 SQLCMDDBNAME。 此参数指定初始数据库。 默认为您的登录名的默认数据库属性。 如果数据库不存在,则生成错误消息且 sqlcmd 退出。
-D
将提供给 -S 的服务器名称解释为 DSN 而不是主机名。 有关详细信息,请参阅使用 sqlcmd 进行连接中的“sqlcmd 和 bcp 中的 DSN 支持”。