程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQLServer按次序履行多個劇本的辦法(sqlcmd適用對象應用辦法)

SQLServer按次序履行多個劇本的辦法(sqlcmd適用對象應用辦法)

編輯:MSSQL

SQLServer按次序履行多個劇本的辦法(sqlcmd適用對象應用辦法)。本站提示廣大學習愛好者:(SQLServer按次序履行多個劇本的辦法(sqlcmd適用對象應用辦法))文章只能為提供參考,不一定能成為您想要的結果。以下是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中界說好,所以直接履行便可,而且履行勝利。

總結:

依據小我經歷,照樣開辟一個批量履行對象會比擬好,這個辦法在大批劇本的時刻可以選用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved