2014-07-22 55 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身份验证,以便您的凭据不会存储在您的命令中,并且不会显示在事件日志中。