我正在更改一些存储过程,然后发生了一些奇怪的事情。
IF EXISTS (SELECT * FROM TABLE1
WHERE varID = (CAST(@v_varID AS int) + 1))
UPDATE TABLE2
SET id = (CAST(@v_varID AS int) + 1)
WHERE category = @v_category
ELSE
UPDATE CATEGORY
SET id = (CAST(@v_varID AS int) + 1)
WHERE category = @v_category
这是我的代码。因为@v_varID
的类型是varchar
,所以我需要将它转换为int
,以便递增id
。问题是,当@v_varID
被转换时,它会在IF EXISTS
中被捕获。当我在没有EXISTS
的情况下更新它时,它就像我预期的那样工作。
ERROR_LOG
显示表中另一个不可转换的@v_varID
不能转换为整数。我只传递了'800'
或一些可变字符的整数,所以它应该可以工作,但不知何故它没有传递IF EXISTS
(如果我去掉了IF EXISTS
,它就会更新)。我只是用了另一种方法让它工作,但我很好奇为什么。
谢谢!
发布于 2018-06-08 08:08:26
您的update
%s都具有条件category = @v_category
。
您的if exists ()
子查询不需要。
我猜varid
是一个字符串。与整数的比较会将varid
转换为整数。
此外,我猜测在转换之前正在检查类别。换句话说,有一行的v_varid
值不正确(即无法转换为整数),并且该行的类别不匹配。
https://stackoverflow.com/questions/50751593
复制相似问题