如何解决我尝试创建此过程时出现的错误 "ERROR 102 sql state 420000"

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 服务器。如何清除此错误并创建过程?

有条件地更新并查看是否发生任何更改

    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 上的值。而且因为数据库正在做检查,所以你不必担心当有人更新 table.

时存储过程是否真的被调用了