【发布时间】:2014-12-04 18:03:37
【问题描述】:
我有一个带有 Id smallint 和 Code varchar(5) 字段的表,代码上有一个唯一键约束。 表中的代码字段中已经有一行带有“ABC”的行
我已经编写了以下存储过程来向其中插入值
ALTER Procedure [dbo].[Insert]
@Id smallint output,
@Code varchar(5)
AS
SET NOCOUNT OFF;
IF not EXISTS (select Code from SomeTable where Code like '%'+@Code and Code <> @Code)
BEGIN
Insert into dbo.SomeTable (Code) values (@Code)
END
ELSE
BEGIN
Throw 50000,'Violation of UNIQUE KEY constraint. Cannot insert Code which is already a suffix of existing Code in table ''dbo.SomeTable''.',1
END
Select Id,Code from dbo.SomeTable where SomeTableCode = 'ABC'
您可以看到我已经编写了自定义抛出异常,当代码作为任何现有代码的后缀出现时应该抛出这个异常。
当我使用以下语句测试插入重复代码时
DECLARE @return_value int,
@Id smallint
EXEC @return_value = [dbo].[Insert]
@Id = @Id OUTPUT,
@Code = N'ABC'
我得到以下异常:
Msg 2627, Level 14, State 1, Procedure Insert, Line 19
Violation of UNIQUE KEY constraint 'IX_SomeTable_1'. Cannot insert duplicate key in object 'dbo.SomeTable'. The duplicate key value is (ABC).
The statement has been terminated.
(1 row(s) affected)
我可以看到结果选项卡中的行(执行了选择语句)
但是当我尝试使用以下语句将代码作为后缀插入表中的另一个代码时:
DECLARE @return_value int,
@Id smallint
EXEC @return_value = [dbo].[Insert]
@Id = @Id OUTPUT,
@Code = N'BC'
我收到以下错误,但未执行 Select 语句,我在结果选项卡中看不到行,为什么?
Msg 50000, Level 16, State 1, Procedure Insert, Line 24
Violation of UNIQUE KEY constraint. Cannot insert Code which is already a suffix of existing Code in table 'dbo.SomeTable'.
【问题讨论】:
标签: sql-server-2012