如何解决我尝试创建此过程时出现的错误 "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.
时存储过程是否真的被调用了
我正在尝试创建一个过程来检查输入的数字(作为 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.