1

我正在使用执行以下操作的 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)。

4

1 回答 1

2

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

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

于 2012-10-18T16:04:27.367 回答