SQL IF EXISTS行为很奇怪

李敏

我正在更改一些存储过程,并且发生了一些奇怪的事情。

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)。我只是使用了另一种方法使其工作,但我很好奇为什么。

谢谢!

戈登·利诺夫

你们update俩都有病category = @v_category

您的if exists ()子查询没有。

我猜这varid是一个字符串。与整数的比较将转换varid为整数。

此外,我猜想转换之前正在检查类别。换句话说,一行中的v_varid值不正确(即不能转换为整数),并且该行中的类别不匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章