2017-10-17 122 views
0

我们在一个非常大的表上有一个列约束,以确保没有插入或更新的数据可以记录零或更低的库存水平。偶尔我们的应用程序会报告错误,因为这些约束被违反。违反日志列约束条件

如果违反约束条件,是否有任何方法将数据行写入表或日志文件?

+1

我认为,不是开箱即用。你总是可以建立一个触发器。 – HoneyBadger

+0

@HoneyBadger,如果在表定义时已经创建了检查约束,则不需要创建显式触发器。 –

+0

@AnkitBajpai如果是这种情况,您可以添加一个答案来描述如何记录违规行为。 – HoneyBadger

回答

1

最好的办法是在桌子上放置一个BEFORE INSERT,UPDATE触发器。

在触发器中,检查inserted表以确定是否有任何行违反约束,如果有,请将它们写入日志表而不是目标表。

然后将任何不违反约束的行写入目标表。

+1

可悲的是,那里不是sql server中的before触发器,你将不得不使用触发器。 –

+0

哎呀,对,这就是SQL Server调用它的原因。 –

+0

是的。我看到我被推入触发器解决方案。触发器的INSTEAD使用TRY ... CATCH来查看插入或更新是否返回违反约束的错误号。如果他们这样做,写一张表,如果没有,就继续进行数据更改。 感谢您的建议,每个人。 – cloudsafe