【发布时间】:2012-12-15 15:21:41
【问题描述】:
我有更多的 SQL 脚本(每个用于不同版本的应用程序),我想在一个事务中执行所有脚本。
我正在使用 c# 执行它:
ExecuteNonQuery(command, conn, trans)
在SqlCommand.
脚本中的 SQL 命令由GO 分隔符分隔。我的 C# 代码遍历所有脚本并基于 GO 分隔符创建 SqlCommand 的集合。 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,但这没有帮助。
你知道如何处理这个问题吗?
谢谢
【问题讨论】:
-
确定你没有在某处埋葬错误?第一个 FK 语法无效,因为它在任何地方都没有
REFERENCES。 -
是的,第一个不起作用,对哪个表 OrganizationUintID 的引用在哪里?
-
伙计们,对不起,我在以堆栈跟踪形式格式化 sql 时犯了一个错误。你是对的,那里缺少参考。我现在已经更正了。
标签: sql sql-server ado.net transactions