我在使用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
这可能是因为约束仅查看已提交的数据,如果是,那么如何判断它也可以查看未提交的数据
答案 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")