2014-07-22 56 views
0

我正在寫批處理文件,將執行10個SQL腳本。批處理文件登錄和註銷只有一次

我使用的SQL CMD代碼

sqlcmd -S server -U username -P password 
     -d database_name -Q "select * from TrialBalance" -o "E:\Balance.txt" 

在這裏,我有服務器,用戶名,並通過每一次我使用這個命令爲10個SQL腳本的時間。是他們的任何方式我的批處理文件可以登錄到SQL服務器使用SQL身份驗證,運行所有的腳本和註銷?

我認爲它會更有效嗎?

+1

我懷疑有10個SQL身份驗證登錄/註銷vs 1的開銷很大。不足以值得你的時間,IMO。但是,如果真的很重要,一種方法是將10個腳本合併爲一個(手動或編程)。 – DMason

+0

您是否在尋找一種簡單的數據轉儲方法? – DMason

回答

0

我想你可以看看:r命令。

這裏是一個什麼可以爲你工作的一個小例子:

腳本A

PRINT 'CREATING TABLES ' 
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 

以股代乙

PRINT 'TOTAL TABLES CREATED = ' + CAST(@TOTAL_TABLES AS VARCHAR) 
GO 
PRINT 'INSERTING DATA INTO EMPLOYEE' 
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 

包裝腳本

SET NOCOUNT ON 
GO 
PRINT 'Start...' 
:On Error exit 

:r D:\Temp\a.sql 
:r D:\Temp\b.sql 
PRINT 'Finish...' 

一個link這個例子的源與部門解釋

0

更加如果命令是小,你也可以只包括他們在您的SQLCMD用分號隔開

sqlcmd -S server -U username -P password 
    -d database_name -Q "select * from TrialBalance; select * from GenLedger; select * from JournalEntry" -o "E:\Balance.txt" 

你可能還要考慮使用Windows身份驗證,以便您的憑據不會存儲在您的命令中,並且不會顯示在事件日誌中。