我正在改变一些存储过程,发生了一些奇怪的事情。
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
无法转换为int。我一直只传递'800'
或一些varchar-ed整数,所以它应该可以工作但不知何故它不会通过IF EXISTS
(如果我摆脱IF EXISTS
它会更新)。我只是用另一种方式使它工作,但我很好奇为什么。
谢谢!
答案 0 :(得分:2)
您的update
条件category = @v_category
。
您的if exists ()
子查询没有。
我猜测varid
是一个字符串。与整数的比较将varid
转换为整数。
此外,我猜在转换之前正在检查类别。换句话说,有一个行v_varid
值不正确(即无法转换为整数),而且这个行位于类别不匹配的行上。