我们有一个用于创建新数据库的系统,其中包括以下方法。
void CreateBaseObjects(DbConnection conn)
{
var scripts = new ScriptManager();
conn.Command(scripts.MainDbXmlSchemaScript).ExecuteNonQuery();
conn.Command(scripts.MainDbSchemaScript).ExecuteNonQuery();
}
DBConnection
包裹SqlConnection
,但没有异常处理。调用此方法时,conn
处于有效状态并连接到新创建的空数据库。
scripts.MainDbXmlSchemaScript
是一个包含少量CREATE XML SCHEMA COLLECTION ...
语句的SQL脚本。
scripts.MainDbSchemaScript
是一个SQL脚本,它创建表及其关联对象,其中一些列具有引用第一个脚本创建的XML模式的列。
大部分时间(> = 99.9%)都可以正常运行。有时,当第二个脚本运行时,我们会收到一条带有消息的SqlException:
错误号6314:元数据中指定的集合不存在:'xmlFoo'
其中xmlFoo
是第一个脚本中第一个XML Schema的名称,该脚本由第二个脚本中的CREATE TABLE
语句引用。
我知道脚本是正确的,因为在一段时间后重试操作是成功的。
所以我的问题是:有没有办法让第一个脚本无法创建XML架构集合对象而不会向ExecuteNonQuery()
方法返回错误?
请注意,此问题存在于多个不同服务器上,运行各种版本的SQL Server(至少2014年和2016年)。