sqlcmd命令执行大的SQL脚本

2020-03-02 14:51:51 浏览数 (1)

前言

这两天从服务器导出一个150多MB的脚本文件,导入到我本地的SQLServer数据库中时,直接打开执行提示内存不足的错误,于是google搜索发现微软针对此类情况有不少命令行工具,其中有一款sqlcmd 实用工具,官方文档地址为:sqlcmd 实用工具 sqlcmd 实用工具是一个命令行实用工具,用于 Transact-SQL 语句和脚本的临时、交互执行以及自动执行 Transact-SQL 脚本撰写任务。 若要以交互方式使用 sqlcmd ,或要生成可使用 sqlcmd运行的脚本文件,用户需要了解 Transact-SQL。 通常以下列方式使用 sqlcmd 实用工具

  • 用户输入 Transact-SQL 语句,输入方式与在命令提示符下输入的方式类似。 结果将显示在命令提示符处。 若要打开命令提示符窗口,请在 Windows 搜索中输入“cmd”,然后单击“命令提示符”将其打开 。 在命令提示符处,键入 sqlcmd ,后面跟随所需的选项列表。 有关 sqlcmd支持的选项的完整列表,请参阅 sqlcmd 实用工具。
  • 用户通过下列方式提交 sqlcmd 作业:指定要执行的单个 Transact-SQL 语句,或将实用工具指向要执行的 Transact-SQL 语句所在的文本文件。 输出通常定向到一个文本文件,但也可能在命令提示符处显示。
  • 查询编辑器中的 SQLCMD 模式 SQL Server Management Studio 。
  • SQL Server 管理对象 (SMO)
  • SQL Server 代理 CmdExec 作业。

常用 sqlcmd 选项

  • 服务器选项 (-S ),用于标识 sqlcmd 连接到的 Microsoft SQL Server 的实例。
  • 身份验证选项(-E、-U 和 -P),用于指定 sqlcmd 连接到 SQL Server 实例所使用的凭据 。 注意: -E 选项为默认选项,无需指定。
  • 输入选项(-Q、-q 和 -i),用于标识 sqlcmd 输入的位置 。
  • 输出选项 (-o),用于指定 sqlcmd 输出所在的文件 。

sqlcmd语法

代码语言:javascript复制
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  
 -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)

使用sqlcmd命令执行大的脚本文件

假如我有一个input.sql的脚本,超过100多MB,本地SQLServer服务器地址为localhost,账号为sa,密码为123456,数据库名称为testDB,需要将脚本导入到testDB中,打开终端,进入到input.sql脚本所在目录(比如说D:/test),执行如下命令:

代码语言:javascript复制
sqlcmd -S localhost -U sa -P 123456 -d testDB -i input.sql

具体的参数描述可以参考官网:sqlcmd - 使用实用工具 当然在命令行中直接使用sqlcmd -?也可以查看相关参数的用法,如下图所示:

0 人点赞