自动执行SQL Server任务的sqlcmd特性(下)

日期: 2009-10-08 作者:Roman Rehak翻译:曾少宁 来源:TechTarget中国 英文

  4、改进错误处理。Sqlcmd会有许多选项可用于处理程序所遇到的意外情况。将这个特性与sqlcmd变量相结合,我们可以很灵活地处理所遇到的意外情况。例如,如果我们想要确定一个特定的脚本文件只会在一个指定的数据库服务器上执行,那么我们需要在代码中确保它不会出错。

这个例子使用“:on error exit”命令来规如果SQL Server实例的名称不是PREHAK,脚本的执行就应该停止:   :on error exit   IF (@@servername != ‘RREHAK’)   BEGIN   RAISERRO……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

  4、改进错误处理。Sqlcmd会有许多选项可用于处理程序所遇到的意外情况。将这个特性与sqlcmd变量相结合,我们可以很灵活地处理所遇到的意外情况。例如,如果我们想要确定一个特定的脚本文件只会在一个指定的数据库服务器上执行,那么我们需要在代码中确保它不会出错。这个例子使用“:on error exit”命令来规如果SQL Server实例的名称不是PREHAK,脚本的执行就应该停止:

  :on error exit
  IF (@@servername != 'RREHAK')
  BEGIN
  RAISERROR(N'This script can only
  Execute on RREHAK', 16, 127)
  END

  任何跟在上面代码后的脚本都不会执行。

  5、备份和恢复一个数据库。现在我将介绍一个好用的sqlcmd脚本例子。我经常会创建脚本来备份一个服务器上的数据库,然后将它恢复到另一个服务器上。通过使用sqlcmd,我们可以在一个脚本里完成这所有的操作,因为我们可以同时连接到源和目标服务器。下面的脚本会备份一个服务器上的Northwind数据库,然后再将它恢复到另一台服务器上。

  -- connect to the source server
  :CONNECT rrehaksql2000
  BACKUP DATABASE Northwind
  TO DISK = 'C:TempNorthwind.bak'
  WITH INIT
  GO
  -- connect to the destination server
  :CONNECT rrehak
  -- if the database exists, disconnect any
  possible connections
  IF EXISTS (SELECT * FROM
  master.dbo.sysdatabases WHERE name =
  'Northwind')
  ALTER DATABASE Northwind
  SET SINGLE_USER WITH ROLLBACK IMMEDIATE
  GO
  RESTORE DATABASE [Northwind]
  FROM DISK = N'C:TempNorthwind.bak'
  WITH FILE = 1,
  MOVE N'Northwind' TO N'C:SQL Server
  DatabasesNorthwind.mdf',
  MOVE N'Northwind_log' TO N'C:SQL Server
  DatabasesNorthwind_1.ldf',
  NOUNLOAD, STATS = 10
  GO
  这个脚本作了进一步的改进,它向我们演示了如何在sqlcmd上执行操作系统的命令。演示脚本从源数据库所备份的位置恢复数据库。假设我们要拷贝一个备份文件到目标服务器的一个文件夹,因为我们将重复地恢复这个文件,这样做可以避免通过网络来恢复。Sqlcmd可以使用指令:!!来执行DOS命令。这样,将下面的脚本放在备份部分代码之后而在恢复部分代码之前,就可以执行DOS拷贝命令来创建备份文件的一个拷贝了:

  :setvar CopyCommand "copy
   sqlserver1c$TempNorthwind.bak
   sqlserver2c$sql"
  :!! $(CopyCommand)

  所有这些特性使得sqlcmd成为自动化SQL Server管理和维护的工具。例如,我们可以创建一个“worker”脚本文件,它包含一套通用的脚本,它们需要在多个数据库、甚至多个服务器上执行。在这些脚本中我们将使用sqlcmd变量:

  本文概述了使用sqlcmd工具的方法和实例。你可以在Microsoft Books Online上阅读更多关于sqlcmd的文章,然后开始创建你自己的一套脚本,来自动化你的重复性任务,从而提高你的工作效率。

翻译

曾少宁
曾少宁

TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。

相关推荐