[英]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.