sqlCmd下的备份还原执行sql脚本和事务等处理


标签: 脚本sqldatabaseintegerc数据库
  3913人阅读  评论(0)  收藏  举报

SqlCmd -S ./SqlExpress

//备份等命令

 

      //控制单用户访问和多用户访问

      //USE [master]

      //GO

      //ALTER DATABASE [BidFileSell] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE

      //ALTER DATABASE [BidFileSell] SET  MULTI_USER WITH NO_WAIT

      //GO

 

//备份恢复数据库

 

'说明,备份恢复数据库

SQLCMD -S ./sqlexpress -U sa -P 000000 -d master -Q"BACKUP DATABASE test to disk='c:

 

/aa/aaa.bak'"

SQLCMD -S ./sqlexpress -U sa -P 000000 -d master -Q"RESTORE DATABASE test from 

 

disk='c:/aa/aaa.bak'"

'说明 ,在D:下database文件夹,在database下建立data

sqlcmd -S ./sqlexpress -i c:/createtable.sql

'重复几次,5次

sqlcmd -S ./sqlexpress -i c:/createdata.sql

 

//运行sql

//存储过程

sp_help

sp_helptext

 

//列出字段

 SELECT Name FROM SysColumns WHERE id=Object_Id('TableName')

 

//切换数据库

  use databasename;

  go

//查看表

  select name from sys.tables;

 

 

create table bbb(id integer);

//测试事务

declare @v_c as integer;

set @v_c=1;

begin tran

while @v_c<50000

begin

insert into bbb(id) values(@v_c);

set @v_c=@v_c+1;

end

if @@error>0 

rollback tran

else

commit tran

go

 

 

 

//测试事务2

 

create table fff(id integer primary key);

 

declare @v_c as integer;

declare @e_c as integer;

set @e_c=0;

set @v_c=1;

begin tran

while @v_c<8

begin

insert into fff(id) values(1);

if @@error<>0 

 set @e_c=@e_c+1

set @v_c=@v_c+1;

end

if @e_c>0 

rollback tran

else

commit tran

go

 

//或者加return返回,这样写

 

declare @v_c as integer;

set @v_c=1;

begin tran

while @v_c<8

begin

insert into fff(id) values(1);

if @@error<>0 

begin

 rollback tran

 return 

end

set @v_c=@v_c+1;

end

commit tran

go



_________________________________________________________________________________________________

转至  http://blog.csdn.net/u011679955/article/details/52152546

谨以此文送给以前的那些同事们,每每回想其在TARA上一起度过的ORACLE访问的日子,就会觉得现在的SQLServer那些花里胡哨的图形界面简直是在亵渎数据库分析师,而深负犯罪感。顺便赞下TOAD,强大的怪兽!

接下来我们来说说sqlcmd.exe. sqlcmd是个好东西啊,它的老爹osql是我最喜欢的SQLServer工具,数度快,功能强大,爽啊!sqlcmd在osql上作了相当多的改进,速度更快,功能更强,但是使用方法却没多大变化。比起那个鸟SQL Server Management Studio不知道好了多少倍。使用着相伴多年的edit.com,享受OLE DB直连,安逸啊!

和往常一样,我们先使用 /?来看看sqlcmd的启动参数们:

C:/Documents and Settings/chenxie.IFLYTEK>sqlcmd.exe /?

Microsoft (R) SQL Server 命令行工具

版本 9.00.1399.06 NT INTEL X86

版权所有 (c) Microsoft Corporation。保留所有权利。

用法: Sqlcmd            [-U 登录 ID]          [-P 密码]

 [-S 服务器]            [-H 主机名]          [-E 可信连接]

 [-d 使用数据库名称] [-l 登录超时值]     [-t 查询超时值]

 [-h 标题]           [-s 列分隔符]      [-w 屏幕宽度]

 [-a 数据包大小]        [-e 回显输入]        [-I 允许带引号的标识符]

 [-c 命令结束]            [-L[c] 列出服务器[清除输出]]

 [-q "命令行查询"]   [-Q "命令行查询" 并退出]

 [-m 错误级别]        [-V 严重级别]     [-W 删除尾随空格]

 [-u unicode 输出]    [-r[0|1] 发送到 stderr 的消息]

 [-i 输入文件]         [-o 输出文件]        [-z 新密码]

 [-f <代码页> | i:<代码页>[,o:<代码页>]] [-Z 新建密码并退出]

 [-k[1|2] 删除[替换]控制字符]

 [-y 可变长度类型显示宽度]

 [-Y 固定长度类型显示宽度]

 [-p[1] 打印统计信息[冒号格式]]

 [-R 使用客户端区域设置]

 [-b 出错时中止批处理]

 [-v 变量 = "值"...] [-A 专用管理连接]

 [-X[1] 禁用命令、启动脚本、环境变量[并退出]]

 [-x 禁用变量情况]

 [-? 显示语法摘要]

呵呵,和osql没什么变化把。下面我将仔细解释每个参数和它们的使用方法。

下面是这些参数的详细解释(注意,区分大小写):

1. 首先是登陆方面的:

如果 –U  -P –S都是空,比如直接在CMD下打 sqlcmd或sqlcmd.exe将使用本地账户尝试连接本地数据库

-U login_id

用户登录 ID。登录 ID 区分大小写。

如果 -U 选项和 -P 选项均未指定,sqlcmd 将尝试使用 Microsoft Windows 身份验证模式进行连接。身份验证基于运行 sqlcmd 的用户的 Windows 帐户。

如果 -U 选项与 -E 选项(在本主题的后面详细说明)一起使用,将生成错误消息。如果 –U 选项后有多个参数,将生成错误消息并退出程序。

-P password

用户指定的密码。密码是区分大小写的。如果未使用 -P 选项,并且未设置 SQLCMDPASSWORD 环境变量,则 sqlcmd 会提示用户输入密码。如果在命令提示符的末尾使用 -P 选项而不带密码,sqlcmd 将使用默认密码 (NULL)。

通过向控制台打印密码提示,可以显示密码提示,如下所示:

Password:

隐藏用户输入,这意味着将不会显示任何输入的内容,光标保留原位不动。

如果将 -P 选项与 -E 选项一起使用,将生成错误消息。

如果 –P 选项后有多个参数,将生成错误消息并退出程序。

-E

使用可信连接而不是用户名和密码登录 SQL Server。默认情况下,sqlcmd 将使用可信连接选项。

-E 选项会忽略可能的用户名和密码环境变量设置,例如 SQLCMDPASSWORD。如果将 -E 选项与 -U 选项或 -P 选项一起使用,将生成错误消息。

-S server_name [ /instance_name ]

指定要连接的 SQL Server 的实例。它设置 sqlcmd 脚本变量 SQLCMDSERVER

指定 server_name 将连接到该服务器中 SQL Server 的默认实例。指定 server_name/instance_name 将连接到该服务器中 SQL Server 的命名实例。如果未指定服务器,sqlcmd 将连接到本地计算机上的 SQL Server 的默认实例。从网络上的远程计算机执行 sqlcmd 时,此选项是必需的。

如果在启动 sqlcmd 时未指定用户名,SQL Server 将检查并使用 SQLCMDSERVER 环境变量。如果未指定服务器,则使用工作站名称。

-H wksta_name

工作站的名称。此选项设置 sqlcmd 脚本变量 SQLCMDWORKSTATION。该工作站名称在 sys.processes 目录视图的 hostname 列中列出,并可使用存储过程 sp_who 返回。如果未指定此选项,则使用当前计算机名称。此名称可用来标识不同的 sqlcmd 会话。

2. 连接设置:

-l time_out

指定 sqlcmd 到 OLE DB 访问接口的登录超时时间。此选项设置 sqlcmd 脚本变量 SQLCMDLOGINTIMEOUT。登录 sqlcmd 的默认超时时间为 8 秒。登录超时设定必须是介于 0 和 65534 之间的数字。如果提供的值不是数值或不在此范围内,sqlcmd 将生成错误消息。该值为 0 时,则允许无限制等待。

-t time_out

   指定命令(或 SQL 语句)超时的时间。此选项设置 sqlcmd 脚本变量 SQLCMDSTATTIMEOUT。如果未指定 time_out 值,则命令将不会超时。登录 time_out 必须是介于 1 和 65535 之间的数字。如果提供的值不是数值或不在此范围内,则 sqlcmd 将生成错误消息。

注:实际的超时值可能会与指定的 time_out 值相差几秒。几秒,不是几毫秒,别看错了。

-d db_name

   启动 sqlcmd 时发出一个USE db_name 语句。此选项设置 sqlcmd 脚本变量 SQLCMDDBNAME。它指定初始数据库。如果数据库不存在,则生成错误消息且 sqlcmd 退出
   
-A

   使用专用管理员连接 (DAC) 登录到 SQL Server。此类型连接用于排除服务器故障。这只适用于支持 DAC 的服务器。如果 DAC 不可用,sqlcmd 会生成错误消息,然后退出。很好的东西,下面会详细介绍。

-I

将 SET QUOTED_IDENTIFIER 连接选项设置为 ON。默认情况下,将其设定为 OFF。这与SQL Server的默认设置不同,SQL是设置默认是ON的。

小帖士:QUOTED_IDENTIFIER,分隔符使用设置。

SET QUOTED_IDENTIFIER 为 ON(默认值)时,由双引号分隔的所有字符串都被解释为对象标识符。(比如 Select * from [USER],或Select * from “USER”,这里USER就被视为非系统保留字)

因此,加引号的标识符不必符合 Transact-SQL 标识符规则。它们可以是保留关键字,并且可以包含 Transact-SQL 标识符中通常不允许的字符。不能使用双引号分隔文字字符串表达式,而必须用单引号括住文字字符串。如果单引号 (') 是文字字符串的一部分,则可以由两个单引号 (") 表示。当对数据库中的对象名使用保留关键字时,SET QUOTED_IDENTIFIER 必须为 ON。

当 SET QUOTED_IDENTIFIER 为 OFF 时,表达式中的文字字符串可以由单引号或双引号分隔。如果文字字符串由双引号分隔,则可以在字符串中包含嵌入式单引号,如省略号。

在SQL操作的时候具体,默认值为ON还是OFF请查SQLServer2005的联机手册,上面有详细描述。

3.显示设置:

-h headers

指定要在列标题之间打印的行数。系统默认为每组查询结果打印一次标题。此选项设置 sqlcmd 脚本变量 SQLCMDHEADERS。使用 -1 指定不能打印标题。如果使用 -1,则在参数和设置之间没有空格(可以是 -h-1,但不能是 -h -1)。任何无效的值都将导致 sqlcmd 生成错误消息,然后退出。

-w column_width

指定用于输出的屏幕宽度。此选项设置 sqlcmd 脚本变量 SQLCMDCOLWIDTH。该列宽必须是介于 8 和 65536 之间的数字。如果指定的列宽不在此范围内,则 sqlcmd 将生成错误消息。默认宽度为 80 个字符。在输出行超出指定的列宽时,将转到下一行。

-e

将输入脚本打印到标准输出设备 (stdout)。

-r [ 0 | 1]

将错误消息输出重定向到屏幕 (stderr)。如果未指定参数或指定参数为 0,则仅重定向严重级别为 17 或更高的错误消息。如果指定参数为 1,则将重定向所有消息输出(包括 PRINT)。

-k [ 1 | 2 ]

     删除输出中的所有控制字符,例如制表符和换行符。这会在返回数据时保留列格式。如果指定了 1,则控制字符被一个空格替代。如果指定了 2,则连续的控制字符被一个空格替代。

-p [ 1 ]

    打印每个结果集的性能统计信息。以下示例是性能统计信息的格式:

Network packet size (bytes): n

x xact[s]:

Clock Time (ms.): total       t1 avg       t2 (t3 xacts per sec.)

其中

x = SQL Server 处理的事务数。

t1 = 所有事务的总时间。

t2 = 单个事务的平均时间。

t3 = 每秒的平均事务数。

所有时间均以毫秒表示。

如果指定了可选参数 1,则统计信息的输出格式为以冒号分隔的格式,此格式可以由脚本轻松导入到电子表格中或进行处理。

如果可选参数是除 1 之外的任何值,则将生成错误并且 sqlcmd 将退出。

-o output_file

标识从 sqlcmd 接收输出的文件。

如果指定了 -u,则 output_file 以 Unicode 格式存储。包含空格的文件名必须用引号引起来。如果文件名无效,将生成一个错误消息,并且 sqlcmd 将退出。sqlcmd 不支持向同一文件并发写入多个 sqlcmd 进程。文件输出将损坏或不正确。

-u

    指定无论 input_file 为何种格式,output_file 都以 Unicode 格式进行存储。

 4.查询配置:

-q " query "

    启动 sqlcmd 时执行查询,但是在查询完成时不退出 sqlcmd。将查询用引号引起来,如下例所示。(建议不要使用这个,如果是写批处理命令或是程序自动执行,请用下面那个)

在命令提示符下,键入(不要在查询中使用 GO 终止符):

sqlcmd -d AdventureWorks -q "SELECT FirstName, LastName FROM Person.Contact WHERE LastName LIKE 'Whi%'"

如果与此选项同时指定了 -b,sqlcmd 在遇到错误时将退出。

-Q " query "

    执行查询并立即退出 sqlcmd,类上。(建议不要使用这个,除非是写批处理命令或是程序自动执行)

    如果与此选项同时指定了 -b,sqlcmd 在遇到错误时将退出。

-i input_file[,input_file2...]

     标识包含一批 SQL 语句或存储过程的文件。可以指定要按顺序读取和处理的多个文件。文件名之间不要使用任何空格。sqlcmd 将首先检查所有指定的文件是否都存在。如果有一个或多个文件不存在,sqlcmd 将退出。

-b

     指定错误发生时 sqlcmd 退出并返回一个 DOS ERRORLEVEL 值。当 SQL Server 错误消息的严重级别高于 10 时,返回给 DOS ERRORLEVEL 变量的值为 1;否则返回的值为 0。如果除 -b 选项外还设置了 -V 选项,则当严重等级低于使用 -V 设置的值时,sqlcmd 将不报告错误。命令提示符批处理文件可以测试 ERRORLEVEL 的值并适当处理错误。sqlcmd 不对严重级别 10 报告错误(信息性消息)。

如果 sqlcmd 脚本包含错误的注释、语法错误或缺少脚本变量,则返回的 ERRORLEVEL 为 1。

-V

    指定 sqlcmd 报告的最低严重级别。Transact-SQL 脚本中发生错误时,仅当严重级别大于或等于由 -V 开关指定的值时,才报告严重级别。如果严重级别低于该值,则报告 0。命令提示符批处理文件可以测试 ERRORLEVEL 的值并适当处理错误。

-s col_separator

    指定列分隔符字符。默认为空格。此选项设置 sqlcmd 脚本变量 SQLCMDCOLSEP。若要使用对操作系统有特殊含义的字符(如 and 字符 (&) 或分号 (;)),请将该字符用双引号 (") 引起来。列分隔符可以是任意 8 位字符。

-c cmd_end

     指定批处理终止符。默认情况下,通过单独在一行中键入“GO”来终止命令并将其发送到 SQL Server。重置批处理终止符时,不要使用对操作系统具有特殊意义的 Transact-SQL 保留关键字或字符,即便它们前面有反斜杠也是如此。

-R

   设置 SQL Server OLE DB 访问接口,使其在将货币、日期和时间数据转换为字符数据时使用客户端区域设置。

5.参数设置:

-a packet_size

    需要不同大小的数据包。该选项设置 sqlcmd 脚本变量 SQLCMDPACKETSIZE。packet_size 必须是介于 512 和 32767 之间的值。如果脚本的两个 GO 命令之间包含大量 SQL 语句,则使用较大的数据包可以提高脚本执行的性能。我们可以请求更大的数据包,但如果请求被拒绝,sqlcmd 将默认为服务器默认的数据包大小。

-L [ c ]

     列出在本地配置的服务器和在网络上广播的服务器的名称。此参数不能与其他参数结合使用。可以列出的服务器的最大数目是 3000。如果服务器列表由于缓冲区大小而被截断,则会显示错误消息。

     如果指定可选参数 c,则输出不会显示 Servers: 标题行,且列出的每个服务器行都没有前导空格。这称为清除输出。清除输出可以提高脚本语言的处理性能。

     注意:由于网络广播的本质,sqlcmd 可能无法及时接收到所有服务器的响应,因此,每次调用此选项时,根据人品的不同,返回的服务器列表可能会有所不同。 :-)

-m error_level

     自定义错误消息的显示。显示高于指定严重级别的错误的消息号、状态和错误级别。而不显示严重级别低于指定级别的错误的信息。用 -1 指定与消息一起返回所有标题,即使是信息性的消息。如果指定了 -1,则在参数和设置之间不能有空格(例如,可以是 -m-1,但不能是 -m -1)。

     此选项设置 sqlcmd 脚本变量 SQLCMDERRORLEVEL。

-W

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

-f < codepage > | i: < codepage > [ < , o: < codepage > ]

     指定输入和输出代码页。代码页页码是指定已安装的 Windows 代码页的数值。

-y display_width

   限制为较大的可变长度数据类型返回的字符数:

·         varchar(max)

·         nvarchar(max)

·         varbinary(max)

·         xml

·         UDT(用户定义的数据类型)

·         text

·         ntext

·         image

     根据实现,UDT 可以使用固定的长度。如果此固定长度 UDT 的长度比 display_width 短,则返回的 UDT 值将不会受影响。但是,如果此长度比 display_width 长,则输出将会被截断。如果 display_width 为 0,则输出将会在 1-MB 处截断。

     使用 -y 0 选项时要特别注意,因为根据返回的数据量大小,此选项可能导致服务器和网络上出现严重性能问题。

-Y display_width

限制为以下数据类型返回的字符数:

·         char

·         nchar

·         varchar(n),其中 1<n<8000

·         nvarchar(n) 其中 1<n<4000

·         sql_variant

-v var=" value"[ var="value"...]

    创建可用于 sqlcmd 脚本中的 sqlcmd 脚本变量。如果该值包含字符,则将其用引号引起来。可以指定多个 var="values" 值。如果指定的任何值中有错误,sqlcmd 会生成错误消息,然后退出。

-X [ 1 ]

    从批处理文件执行 sqlcmd 时,将禁用可能危及系统安全的命令。禁用的命令仍然可以被识别;sqlcmd 发出警告消息并继续。如果指定了可选参数 1,则 sqlcmd 将生成错误消息,然后退出。使用 -X 选项时,将禁用以下命令:

·         ED

·         !! command

    如果指定 -X 选项,它会阻止将环境变量传递给 sqlcmd。同时该选项还会阻止执行通过使用 SQLCMDINI 脚本变量指定的启动脚本。

-x
    导致 sqlcmd 忽略脚本变量。当脚本中包含多个 INSERT 语句,并且这些语句可能包含格式与常规变量,如 $(variable_name) 相同的字符串时,这一选项很有用。




_______________________________________________________________________________________________________________-

转至 :  http://blog.csdn.net/dba_huangzj/article/details/8350829

目录(?)[+]

概述:

 

       作为DBA,经常要用开发人员提供的SQL脚本来更新正式数据库,但是一个比较合理的开发流程,当提交脚本给DBA执行的时候,可能已经有几百个sql文件,并且有执行顺序,如我现在工作的公司,十几个客户,每个客户一个库,但是数据库结构、存储过程、视图等都是一模一样,每次执行脚本(以下称为升级),如果有一百个脚本,那么就要按顺序执行过千次,这种工作量可不是一个人能承受得了的。

 

解决方法:

 

应对这种情况有以下几种方法:

 

1、  购买第三方软件(一般估计很少人买)

 

2、  自己编程一个小软件来执行,但是这个逻辑性要求比较高,而且编程的能力要有一定层次,这个我暂时没有。

 

3、  使用本文介绍的方法,至于是啥,接着看:

 

使用SQLCMD在SQLServer上执行多个脚本:

 

             SQLCMD:使用 sqlcmd 实用工具,可以在命令提示符处、在 SQLCMD 模式下的查询编辑器中、在 Windows 脚本文件中或者在SQL Server 代理作业的操作系统 (Cmd.exe) 作业步骤中输入 Transact-SQL 语句、系统过程和脚本文件。 此实用工具使用 ODBC 执行 Transact-SQL 批处理。(来源于MSDN)详细语法可以到网上查找,这里就不贴出来。

 

       SQLCMD有一个很重要的命令::r,记住,SQLCMD是大小写敏感的。当:r发现正在运行SQL脚本,它会告诉SQLCMD把这个文件所引用的文件一并放入调用脚本中。这将告诉你,停止目前的单个查询。并重新调整查询,把应该关联的查询放到适当的位置。另外,使用:r命令在一个批处理中执行多个脚本,使得你可以定义一个单独的变量集,用于包含所有脚本,但是不包含GO终结符。2005以后引入SQLCMD,可以用于将来替代osql工具。如果你不熟悉SQLCMD,可以认为它是一个能从操作系统执行T-SQL命令和脚本的命令行工具。

 

       下面例子中,创建5个作用在TestDB数据库上有关联的sql文件。第一个脚本叫做CREATE_DB.sql,用于创建一个叫做TestDB的数据库。这个脚本包含了4个其他的脚本(使用了:r命令。),用于生成其他表、表插入、索引创建和存储过程的创建。一个.bat文件用于创建用来执行SQLCMD命令。

 

 

第一步:先创建一个在C盘下的文件夹:C:\Scripts。然后把脚本存放到这个文件夹中:

脚本1:CREATE_DB.sql

[sql]  view plain  copy
 print ?
  1. /* SCRIPT: CREATE_DB.sql */  
  2. /* 创建TestDB数据库 */  
  3.   
  4. -- This is the main caller for each script  
  5. SET NOCOUNT ON  
  6. GO  
  7.   
  8. PRINT '开始创建TestDB数据库'  
  9. IF EXISTS (SELECT 1 FROM SYS.DATABASES WHERE NAME = 'TestDB')  
  10. DROP DATABASE TestDB  
  11. GO  
  12. CREATE DATABASE TestDB  
  13. GO  
  14.   
  15. :On Error exit  
  16.   
  17. :r c:\Scripts\CREATE_TABLES.sql  
  18. :r c:\Scripts\TABLE_INSERTS.sql  
  19. :r c:\Scripts\CREATE_INDEXES.sql  
  20. :r c:\Scripts\CREATE_PROCEDURES.sql  
  21.   
  22. PRINT '创建完毕'  
  23. GO  

 

脚本2:CREATE_INDEXES.sql

[sql]  view plain  copy
 print ?
  1. /* 创建索引 */  
  2. PRINT '开始创建索引'  
  3. GO  
  4. USE TestDB  
  5. GO  
  6. IF NOT EXISTS ( SELECT  1  
  7.                 FROM    SYS.INDEXES  
  8.                 WHERE   NAME = 'IX_EMPLOYEE_LASTNAME' )   
  9.     CREATE INDEX IX_EMPLOYEE_LASTNAME ON DBO.EMPLOYEE(LASTNAME, FIRSTNAME)  
  10. GO  
  11. IF NOT EXISTS ( SELECT  1  
  12.                 FROM    SYS.INDEXES  
  13.                 WHERE   NAME = 'IX_TIMECARD_EMPLOYEEID' )   
  14.     CREATE INDEX IX_TIMECARD_EMPLOYEEID ON DBO.TIMECARD(EMPLOYEEID)  
  15. GO  


脚本3:CREATE_PROCEDURES.sql

[sql]  view plain  copy
 print ?
  1. /* 创建存储过程 */  
  2. PRINT '正在创建存储过程'  
  3. GO  
  4. USE TestDB  
  5. GO  
  6. IF OBJECT_ID('GET_EMPLOYEE_TIMECARDS'IS NOT NULL   
  7.     DROP PROCEDURE DBO.GET_EMPLOYEE_TIMECARDS  
  8. GO  
  9. CREATE PROCEDURE DBO.GET_EMPLOYEE_TIMECARDS @EMPLOYEEID INT  
  10. AS   
  11.     SET NOCOUNT ON  
  12.   
  13.     SELECT  *  
  14.     FROM    DBO.EMPLOYEE E  
  15.             JOIN DBO.TIMECARD T ON E.EMPLOYEEID = T.EMPLOYEEID  
  16.     WHERE   E.EMPLOYEEID = @EMPLOYEEID  
  17.     ORDER BY DATEWORKED  
  18.   
  19. GO  


脚本4:CREATE_TABLES.sql

[sql]  view plain  copy
 print ?
  1. /* 创建数据表 */  
  2. PRINT '正在创建数据表 '  
  3. GO  
  4. USE TestDB  
  5. GO  
  6. IF OBJECT_ID('EMPLOYEE'IS NOT NULL   
  7.     DROP TABLE DBO.EMPLOYEE  
  8. GO  
  9. CREATE TABLE DBO.EMPLOYEE  
  10.     (  
  11.       EMPLOYEEID INT IDENTITY(1, 1)  
  12.                      NOT NULL  
  13.                      PRIMARY KEY ,  
  14.       FIRSTNAME VARCHAR(50) ,  
  15.       LASTNAME VARCHAR(50)  
  16.     )  
  17. GO  
  18.   
  19. IF OBJECT_ID('TIMECARD'IS NOT NULL   
  20.     DROP TABLE DBO.TIMECARD  
  21. GO  
  22. CREATE TABLE DBO.TIMECARD  
  23.     (  
  24.       TIMECARDID INT IDENTITY(1, 1)  
  25.                      NOT NULL  
  26.                      PRIMARY KEY ,  
  27.       EMPLOYEEID INT NOT NULL ,  
  28.       HOURSWORKED TINYINT NOT NULL ,  
  29.       HOURLYRATE MONEY NOT NULL ,  
  30.       DATEWORKED DATETIME NOT NULL  
  31.     )  
  32. GO  
  33.   
  34. DECLARE @TOTAL_TABLES INT  
  35. SET @TOTAL_TABLES = 2  


脚本5:TABLE_INSERTS.sql

[sql]  view plain  copy
 print ?
  1. /* 插入表数据 */  
  2.   
  3. PRINT 'TOTAL TABLES CREATED = ' + CAST(@TOTAL_TABLES AS VARCHAR)  
  4. GO  
  5. PRINT '正在插入数据到表 EMPLOYEE'  
  6. GO  
  7. USE TestDB  
  8. GO  
  9. INSERT  INTO DBO.EMPLOYEE  
  10.         ( FIRSTNAME, LASTNAME )  
  11.         SELECT  'JOHN' ,  
  12.                 'DOE'  
  13. GO  
  14. INSERT  INTO DBO.EMPLOYEE  
  15.         ( FIRSTNAME, LASTNAME )  
  16.         SELECT  'JANE' ,  
  17.                 'DOE'  
  18. GO  
  19. INSERT  INTO DBO.EMPLOYEE  
  20.         ( FIRSTNAME, LASTNAME )  
  21.         SELECT  'JEFF' ,  
  22.                 'DOE'  
  23. GO  


 

第二步:在C盘根目录下创建一个bat文件create_db.bat,用于执行SQLCMD:

 

[plain]  view plain  copy
 print ?
  1. SQLCMD -E -dmaster -ic:\Scripts\create_db.sql  
  2. PAUSE  

 


第三步:在C盘下直接执行bat文件:

 

双击文件可以看到:

在执行前,是没有TestDB:

 

执行中:

 

执行后,该创建的东西都创建出来了:

 

 

由于执行的顺序已经在脚本1中定义好,所以直接执行即可,并且执行成功。

 

总结:

             根据个人经验,还是开发一个批量执行工具会比较好,这个方法在少量脚本的时候可以选用。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值