簡體   English   中英

當我嘗試創建此過程時,如何解決此錯誤“ 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 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM