批处理文件只能登录和注销一次

时间:2014-07-22 18:46:07

标签: sql sql-server

我正在编写将执行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服务器,运行所有脚本并注销?

我认为它会更有效率吗?

2 个答案:

答案 0 :(得分: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

Scrip B

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,其中包含更多的部门解释

答案 1 :(得分: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身份验证,这样您的凭据就不会存储在您的命令中,也不会显示在您的事件日志中。