• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQLServer按顺序执行多个脚本的方法(sqlcmd实用工具使用方法)

    解决方法:

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

    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

    复制代码 代码如下:

    /* SCRIPT: CREATE_DB.sql */
    /* 创建TestDB数据库 */

    -- This is the main caller for each script
    SET NOCOUNT ON
    GO

    PRINT '开始创建TestDB数据库'
    IF EXISTS (SELECT 1 FROM SYS.DATABASES WHERE NAME = 'TestDB')
    DROP DATABASE TestDB
    GO
    CREATE DATABASE TestDB
    GO

    :On Error exit

    :r c:\Scripts\CREATE_TABLES.sql
    :r c:\Scripts\TABLE_INSERTS.sql
    :r c:\Scripts\CREATE_INDEXES.sql
    :r c:\Scripts\CREATE_PROCEDURES.sql

    PRINT '创建完毕'
    GO

    脚本2:CREATE_INDEXES.sql

    复制代码 代码如下:

    /* 创建索引 */
    PRINT '开始创建索引'
    GO
    USE TestDB
    GO
    IF NOT EXISTS ( SELECT  1
      FROM    SYS.INDEXES
      WHERE   NAME = 'IX_EMPLOYEE_LASTNAME' )
        CREATE INDEX IX_EMPLOYEE_LASTNAME ON DBO.EMPLOYEE(LASTNAME, FIRSTNAME)
    GO
    IF NOT EXISTS ( SELECT  1
      FROM    SYS.INDEXES
      WHERE   NAME = 'IX_TIMECARD_EMPLOYEEID' )
        CREATE INDEX IX_TIMECARD_EMPLOYEEID ON DBO.TIMECARD(EMPLOYEEID)
    GO

    脚本3:CREATE_PROCEDURES.sql

    复制代码 代码如下:

    /* 创建存储过程 */
    PRINT '正在创建存储过程'
    GO
    USE TestDB
    GO
    IF OBJECT_ID('GET_EMPLOYEE_TIMECARDS') IS NOT NULL
        DROP PROCEDURE DBO.GET_EMPLOYEE_TIMECARDS
    GO
    CREATE PROCEDURE DBO.GET_EMPLOYEE_TIMECARDS @EMPLOYEEID INT
    AS
        SET NOCOUNT ON

        SELECT  *
        FROM    DBO.EMPLOYEE E
         JOIN DBO.TIMECARD T ON E.EMPLOYEEID = T.EMPLOYEEID
        WHERE   E.EMPLOYEEID = @EMPLOYEEID
        ORDER BY DATEWORKED

    GO

    脚本4:CREATE_TABLES.sql

    复制代码 代码如下:

    /* 创建数据表 */
    PRINT '正在创建数据表 '
    GO
    USE TestDB
    GO
    IF OBJECT_ID('EMPLOYEE') IS NOT NULL
        DROP TABLE DBO.EMPLOYEE
    GO
    CREATE TABLE DBO.EMPLOYEE
        (
    EMPLOYEEID INT IDENTITY(1, 1)
    NOT NULL
    PRIMARY KEY ,
    FIRSTNAME VARCHAR(50) ,
    LASTNAME VARCHAR(50)
        )
    GO

    IF OBJECT_ID('TIMECARD') IS NOT NULL
        DROP TABLE DBO.TIMECARD
    GO
    CREATE TABLE DBO.TIMECARD
        (
    TIMECARDID INT IDENTITY(1, 1)
    NOT NULL
    PRIMARY KEY ,
    EMPLOYEEID INT NOT NULL ,
    HOURSWORKED TINYINT NOT NULL ,
    HOURLYRATE MONEY NOT NULL ,
    DATEWORKED DATETIME NOT NULL
        )
    GO

    DECLARE @TOTAL_TABLES INT
    SET @TOTAL_TABLES = 2

    脚本5:TABLE_INSERTS.sql

    复制代码 代码如下:

    /* 插入表数据 */

    PRINT 'TOTAL TABLES CREATED = ' + CAST(@TOTAL_TABLES AS VARCHAR)
    GO
    PRINT '正在插入数据到表 EMPLOYEE'
    GO
    USE TestDB
    GO
    INSERT  INTO DBO.EMPLOYEE
     ( FIRSTNAME, LASTNAME )
     SELECT  'JOHN' ,
      'DOE'
    GO
    INSERT  INTO DBO.EMPLOYEE
     ( FIRSTNAME, LASTNAME )
     SELECT  'JANE' ,
      'DOE'
    GO
    INSERT  INTO DBO.EMPLOYEE
     ( FIRSTNAME, LASTNAME )
     SELECT  'JEFF' ,
      'DOE'
    GO

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

    双击文件可以看到:
    在执行前,是没有TestDB:

     

    执行中:

     

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

     

     

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

    总结:

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

    您可能感兴趣的文章:
    • .Net下执行sqlcmd的方法
    • SQLServer2005中的SQLCMD工具使用
    上一篇:SQLServer 2008 CDC功能实现数据变更捕获脚本
    下一篇:SQL Server 2000“设备激活错误”的解决方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SQLServer按顺序执行多个脚本的方法(sqlcmd实用工具使用方法) SQLServer,按,顺序,执行,多个,