SQLCMD

--DEMO

1.cmd

2.sqlcmd -U 用户名 -P 密码 -S 域名 -d 数据库名称

注意大小写和空格


使用 sqlcmd 运行 Transact-SQL 脚本文件


可以使用 sqlcmd 执行数据库脚本文件。 脚本文件是一些文本文件,它们同时包含 Transact-SQL 语句、sqlcmd 命令和脚本变量。 有关如何使用脚本变量的详细信息,请参阅将 sqlcmd 与脚本变量结合使用 sqlcmd 与脚本文件中语句、命令和脚本变量的配合方式类似于它与交互输入的语句和命令的配合方式。 主要区别在于 sqlcmd 从输入文件连续读取内容,而不是等待用户输入语句、命令和脚本变量。

可以通过几种不同的方式创建数据库脚本文件:

  • 可以在 SQL Server Management Studio 中以交互方式生成和调试一组 Transact-SQL 语句,然后将“查询”窗口中的内容另存为脚本文件。

  • 可以使用记事本等文本编辑器创建包含 Transact-SQL 语句的文本文件。

A.使用 sqlcmd 运行脚本

启动记事本并键入以下 Transact-SQL 语句:

USE AdventureWorks2012;

GO

SELECT TOP (3) BusinessEntityID, FirstName, LastName

FROM Person.Person;

GO

创建一个名为 MyFolder 的文件夹,然后将脚本另存为文件夹 C:\MyFolder 中的文件 MyScript.sql在命令提示符处输入以下命令运行脚本,并将输出放入 MyFolderMyOutput.txt 中:

sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt

在记事本中查看 MyOutput.txt 的内容时,将看到以下内容:

Changed database context to 'AdventureWorks2012'.

BusinessEntityID FirstName LastName

---------------- ----------- -----------

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

(3 rows affected)

B.通过专用管理连接使用 sqlcmd

在下面的示例中,sqlcmd 通过专用管理员连接 (DAC) 连接到一台具有阻塞问题的服务器。

C:\>sqlcmd -S ServerName -A

1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;

2> GO

下面是结果集:

spid blocked

------ -------

62 64

(1 rows affected)

使用 sqlcmd 结束阻塞进程。

1> KILL 64;

2> GO

C.使用 sqlcmd 执行存储过程

下面的示例说明如何使用 sqlcmd 执行存储过程。 创建以下存储过程。

USE AdventureWorks2012;

IF OBJECT_ID ( ' dbo.ContactEmailAddress, 'P' ) IS NOT NULL

DROP PROCEDURE dbo.ContactEmailAddress;

GO

CREATE PROCEDURE dbo.ContactEmailAddress

(

@FirstName nvarchar(50)

,@LastName nvarchar(50)

)

AS

SET NOCOUNT ON

SELECT EmailAddress

FROM Person.Person

WHERE FirstName = @FirstName

AND LastName = @LastName;

SET NOCOUNT OFF

sqlcmd 提示符下,输入以下内容:

C:\sqlcmd

1> :Setvar FirstName Gustavo

1> :Setvar LastName Achong

1> EXEC dbo.ContactEmailAddress $(Gustavo),$(Achong)

2> GO

EmailAddress

-----------------------------

gustavo0@adventure-works.com

D.使用 sqlcmd 进行数据库维护

下面的示例说明了如何将 sqlcmd 用于数据库维护任务。 使用以下代码创建 C:\BackupTemplate.sql

USE master;

BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';

sqlcmd 提示符下,输入以下内容:

C:\ >sqlcmd

1> :connect <server>

Sqlcmd: Successfully connected to server <server>.

1> :setvar db msdb

1> :setvar bakfile c:\msdb.bak

1> :r c:\BackupTemplate.sql

2> GO

Changed database context to 'master'.

Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.

Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.

BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)

E.使用 sqlcmd 对多个实例执行代码

某文件中的以下代码表示一个连接到两个实例的脚本。 请注意连接到第二个实例之前的 GO

:CONNECT <server>\,<instance1>

EXEC dbo.SomeProcedure

GO

:CONNECT <server>\,<instance2>

EXEC dbo.SomeProcedure

GO

E.返回 XML 输出

下面的示例说明了如何以连续流返回未格式化的 XML 输出。

C:\>sqlcmd -d AdventureWorks2012

1> :XML ON

1> SELECT TOP 3 FirstName + ' ' + LastName + ', '

2> FROM Person.Person

3> GO

Syed Abbas, Catherine Abel, Kim Abercrombie,

F.在 Windows 脚本文件中使用 sqlcmd

在 .bat 文件中,sqlcmd命令(如 sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt, )可以与 VBScript 一起执行。 此时,不要使用交互选项。 执行 .bat 文件的计算机上必须安装 sqlcmd

首先,创建以下四个文件:

  • C:\badscript.sql

    SELECT batch_1_this_is_an_error
    GO
    SELECT 'batch #2'
    GO
    
  • C:\goodscript.sql

    SELECT 'batch #1'
    GO
    SELECT 'batch #2'
    GO
    
  • C:\returnvalue.sql

    :exit(select 100)
    @echo off
    C:\windowsscript.bat
    @echo off
    
    echo Running badscript.sql
    sqlcmd -i badscript.sql -b -o out.log
    if not errorlevel 1 goto next1
    echo == An error occurred 
    
    :next1
    
    echo Running goodscript.sql
    sqlcmd -i goodscript.sql -b -o out.log
    if not errorlevel 1 goto next2
    echo == An error occurred 
    
    :next2
    echo Running returnvalue.sql
    sqlcmd -i returnvalue.sql -o out.log
    echo SQLCMD returned %errorlevel% to the command shell
    
    :exit
    
  • C:\windowsscript.bat

    @echo off
    
    echo Running badscript.sql
    sqlcmd -i badscript.sql -b -o out.log
    if not errorlevel 1 goto next1
    echo == An error occurred 
    
    :next1
    
    echo Running goodscript.sql
    sqlcmd -i goodscript.sql -b -o out.log
    if not errorlevel 1 goto next2
    echo == An error occurred 
    
    :next2
    echo Running returnvalue.sql
    sqlcmd -i returnvalue.sql -o out.log
    echo SQLCMD returned %errorlevel% to the command shell
    
    :exit
    

然后,在命令提示符处运行 C:\windowsscript.bat

C:\>windowsscript.bat

Running badscript.sql

== An error occurred

Running goodscript.sql

Running returnvalue.sql

SQLCMD returned 100 to the command shell

G.使用 sqlcmd 在 Windows Azure SQL Database 上设置加密

可对于与 SQL Database 数据的连接执行 sqlcmd以指定加密和证书信任。 有两个 sqlcmd  选项可供选择:

  • -N 开关,客户端使用它来请求加密连接。 此选项等同于 ADO. net 选项 ENCRYPT = true

  • –C 开关,客户端用来将其配置为隐式信任服务器证书且不对其进行验证。 此选项等同于 ADO. net 选项 TRUSTSERVERCERTIFICATE = true

SQL Database服务并不支持 SQL Server 实例上所有可用的 SET 选项。 当将相应的 SET 选项设置为 ONOFF 时,下面的选项将引发错误:

  • SET ANSI_DEFAULTS

  • SET ANSI_NULLS

  • SET REMOTE_PROC_TRANSACTIONS

  • SET ANSI_NULL_DEFAULT

下面的 SET 选项虽然不会引发异常,但无法使用。 不推荐使用这些选项:

  • SET CONCAT_NULL_YIELDS_NULL

  • SET ANSI_PADDING

  • SET QUERY_GOVERNOR_COST_LIMIT

语法

以下示例介绍了 SQL Server Native Client 访问接口设置包括的情况:ForceProtocolEncryption = FalseTrust Server Certificate = No

使用 Windows 凭据进行连接并对通信加密:

SQLCMD –E –N

使用 Windows 凭据进行连接并信任服务器证书:

SQLCMD –E –C

使用 Windows 凭据进行连接、对通信加密并信任服务器证书:

SQLCMD –E –N –C

以下示例介绍了 SQL Server Native Client 访问接口设置包括的情况:ForceProtocolEncryption = TrueTrustServerCertificate = Yes

使用 Windows 凭据进行连接、对通信加密并信任服务器证书:

SQLCMD –E

使用 Windows 凭据进行连接、对通信加密并信任服务器证书:

SQLCMD –E –N

使用 Windows 凭据进行连接、对通信加密并信任服务器证书:

SQLCMD –E –T

使用 Windows 凭据进行连接、对通信加密并信任服务器证书:

SQLCMD –E –N –C

如果访问接口指定了 ForceProtocolEncryption = True,则启用加密,即使连接字符串中具有 Encrypt=No


FROM:http://technet.microsoft.com/zh-cn/library/ms180944.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值