TransactionScope失败检查约束

时间:2015-03-30 10:04:00

标签: c# sql-server transactionscope check-constraints

我在使用TransactionScope和SQL Server中的检查约束时遇到了问题。

我想这样插入表格:

Col A | Col B
------------
 Dave |  0
 Fred |  1

该表有一个检查约束条件,即Col B中的条目必须始终为' 0'。第一行插入正常但第二行未通过约束。

command.CommandText = @"INSERT INTO MyTable (ColA, ColB) VALUES(@ColA, @ColB)";                                   

            foreach (var row in model.Rows)
            {

                    command.Parameters["@ColA"].Value = model.ColA;
                    command.Parameters["@ColB"].Value = model.ColB;

                    command.ExecuteNonQuery();

            }

检查约束调用以下函数

IF EXISTS (SELECT * FROM mytable WHERE ColB = 0) RETURN 1

RETURN 0

这可能是因为约束仅查看已提交的数据,如果是,那么如何判断它也可以查看未提交的数据

1 个答案:

答案 0 :(得分:0)

我认为Check Constraints不适合像你这样的场景。你应该使用而不是update / insert trigger来检查是否至少有一行(在表格和/或插入的值中) )

在触发器中有一个插入的表,其中包含将要插入的所有行,因此您可以编写如下内容:

IF NOT EXISTS (SELECT * FROM mytable a UNION inserted WHERE ColB = 0) RIASEERROR("At least one row with ColB=0 should exist")