我有更多的 SQL 脚本(每个用于不同版本的应用程序),我想在一个事务中执行所有脚本。
我正在使用 c# 执行它:
ExecuteNonQuery(command, conn, trans)
上SqlCommand
。
脚本中的 SQL 命令由GO
分隔符分隔。我的 C# 代码遍历所有脚本并SqlCommand
基于GO
分隔符创建集合。GO
分隔符被排除在执行SqlCommand
之外。它只是脚本文件中的分隔符。
一切正常,但我发现了一个问题。我在一个脚本中有以下命令:
ALTER TABLE [dbo].[RoleDataPermissions] WITH NOCHECK ADD CONSTRAINT
[FK_RoleDataPermissions_OrganizationUnits] FOREIGN KEY([OrganizationUnitID])
REFERENCES [OrganizationUnits] ([ID])
在另一个脚本中(在另一个版本的应用程序中,这个约束被删除了)我有:
ALTER TABLE [dbo].[RoleDataPermissions]
DROP CONSTRAINT FK_RoleDataPermissions_OrganizationUnits
第一个命令顺利通过,但第二个命令抛出异常:
'FK_RoleDataPermissions_OrganizationUnits' 不是约束。无法删除约束。请参阅以前的错误。
我正在尝试找出导致此问题的原因。我认为,问题在于,如果所有命令都在一个事务下执行,那么第一个命令没有提交,然后第二个命令找不到这个约束。我也尝试过将隔离级别更改为readuncommited
,但它没有帮助。
你知道如何处理这个问题吗?
谢谢