[英]How to solve this error “ERROR 102 sql state 420000” which comes up when I try to create this procedure
我试图创建一个过程来检查输入的数字(作为nvarchar类型)是否已经存在。 如果存在,则会进行更新,否则会向用户抛出错误。 但是无法创建该过程,因为一旦执行命令ERROR 102/156 SQL STATE 42000,就会出现该过程。
CREATE PROCEDURE UpdateAWBUnique
(
@AWB as nvarchar,
@Internal as nvarchar
)
AS
BEGIN
SET NOCOUNT ON
if((SELECT count(*) From Def_tab WHERE AWB=@AWB) == 0)
BEGIN
UPDATE Def_tab SET AWB= @AWB
where Internal=@Internal
END
ELSE
BEGIN
PRINT 'Already Exits'
END
END
GO
仅供参考,我使用Microsoft SQL Server。 如何清除此错误并创建程序?
有条件地更新并查看是否发生任何更改
UPDATE Def_tab
SET AWB = @AWB
WHERE Internal = @Internal
AND NOT EXISTS (SELECT 1 FROM Def_tab t WHERE t.AWB= @AWB)
IF (@@ROWCOUNT = 0)
PRINT 'Already Exits'
否则,在并发环境中,可能会在
if((SELECT count(*) From Def_tab WHERE AWB=@AWB) == 0)
和
BEGIN
UPDATE Def_tab SET AWB= @AWB
使if
检查无效
您似乎希望Def_Tab.AWB
是唯一的。 如果是这样,则应让数据库强制执行数据完整性。 定义唯一约束:
alter table t add constraint unq_def_tab_awb
unique (awb);
不需要存储过程。
这还将检查insert
上的值。 并且由于数据库正在执行检查,因此您不必担心有人更新表时是否实际调用了存储过程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.