为什么sqlcmd在从bat中多次调用时会失败?

时间:2012-10-18 15:18:04

标签: sql-server-2008-r2 sql-server-express

我正在使用bat文件将一些数据导入SQL Server 2008 R2,其中包含以下内容:

sqlcmd -E -S fooserver -d fooDB -e -i foo.sql -o foo.output
sqlcmd -E -S fooserver -d fooDB -e -i bar.sql -o bar.output
sqlcmd -E -S fooserver -d fooDB -e -i baz.sql -o baz.output
sqlcmd -E -S fooserver -d fooDB -e -i qux.sql -o qux.output

当我指向开发人员版本实例时,一切正常。但是,如果我指向SQL Express实例,则前几个命令运行正常,并且下一个命令失败并出现身份验证错误:

Login failed for user 'MYDOMAIN\FOOUSER'. Reason: Failed to open the explicitly specified database. [CLIENT: <local machine>]

但是,如果我一次运行一个上述命令,那么它们都会运行而没有错误。

另外值得注意的是,目标数据库会暂时进入恢复模式(在SQL Server管理控制台中,数据库旁边会显示“正在恢复”),因此登录失败,因为目标数据库处于恢复模式。我将重新尝试在开发人员版本实例上不会出现此问题。

针对SQL Express 2008 R2 RTM和SP2观察到相同的问题(尚未测试SP1)。

1 个答案:

答案 0 :(得分:2)

对于到达此问题的任何人寻找解决方案 - 结果是由数据库上的数据库“自动关闭”选项(MyDatabase-&gt;属性 - &gt; SQL Server管理控制台中的选项)引起的。在Developer edition实例上,默认值为“false”,而SQL Express实例默认为“true”。

对我来说失败的sqlcmd跟随了一个插入大量数据的sqlcmd,这可能导致自动关闭逻辑的足够工作,使其与下一个sqlcmd重叠。