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



我正在尝试创建一个过程,该过程检查是否已经存在(作为NVARCHAR类型(。如果存在,则进行更新,否则将错误丢给用户。但是无法创建该过程,因为一旦我执行命令错误102/156 SQL状态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

fyi我使用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上的值。而且由于数据库正在进行检查,因此您不必担心有人在更新表时是否实际调用了存储过程。

最新更新