Sql server 2008 r2 为什么从bat多次调用sqlcmd失败?

Sql server 2008 r2 为什么从bat多次调用sqlcmd失败?,sql-server-2008-r2,sql-server-express,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 fooserve

我正在使用一个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>]
用户“MYDOMAIN\FOOUSER”登录失败。原因:无法打开显式指定的数据库。[客户:] 但是,如果我一次运行一个以上命令,那么它们都会无错误地运行

另外值得注意的是,目标数据库短暂进入恢复模式(“恢复中”显示在SQL Server管理控制台中数据库的旁边),因此,由于目标数据库短暂处于恢复模式,登录似乎失败。我将再次重申,这个问题不会发生在developer edition实例上


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

对于任何发现此问题并寻求解决方案的人来说,这是由数据库上的数据库“自动关闭”选项(MyDatabase->Properties->SQL Server管理控制台中的选项)引起的。在Developer edition实例上,默认值为“false”,而SQL Express实例默认值为“true”

在我看来失败的sqlcmd后面插入了大量数据,这可能导致自动关闭逻辑的工作足以使其与下一个sqlcmd重叠