我正在查看一些代码(我没有编写它!)来测试我们的代码在尝试删除存在依赖项的表行时是否捕获两个错误条件。
该代码最初查找消息中的特定文本,而不是使用错误号。
为了提供多语言支持,最好根据错误号而不是错误消息来捕获异常。
在测试中,代码正在查找两组文本,但我似乎无法确定它们之间的区别,因此仅检查错误号 547 会让人感到不舒服。
- DELETE 语句与 REFERENCE 约束冲突...
- DELETE 语句与 SAME TABLE REFERENCE 约束冲突...
是否可以安全地假设这两条错误消息的错误号均为 547?
干杯
科林
547 是用于的错误代码any违反约束,不仅仅是外键,例如:
create table T (
ID int not null,
constraint CK_Not1 CHECK (ID != 1)
)
go
insert into T (ID) values (2)
go
update T set ID = 1
(1 row(s) affected)
Msg 547, Level 16, State 0, Line 1
The UPDATE statement conflicted with the CHECK constraint "CK_Not1". The conflict occurred in database "Flange", table "dbo.T", column 'ID'.
The statement has been terminated.
话虽这么说,除了外键之外,我想不出任何其他类型的约束可能会被违反DELETE
声明。(向@onedaywhen 致敬)
如果你看进去sys.messages
,你会发现 547 必须是违反约束的:
select text from sys.messages where message_id=547 and language_id=1033
%ls 语句与 %ls 约束“%.*ls”冲突。数据库“%.*ls”、表“%.*ls”%ls%.*ls%ls 中发生冲突。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)