SQL是否存在行为异常
我正在更改一些存储过程,发生了一些奇怪的事情SQL是否存在行为异常,sql,sql-server,database,Sql,Sql Server,Database,我正在更改一些存储过程,发生了一些奇怪的事情 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
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\u varID
的类型是varchar
,我需要将其转换为int
,以增加id
。问题是当@v_varID
是一个已转换的变量时,它会在处被捕获(如果存在)。当我只是在没有存在的情况下更新它时
就像我预期的那样工作
ERROR\u LOG
显示了表中另一个不可转换的@v\u varID
无法转换为int。我只传递了'800'
或某个varchar-ed整数,所以它应该可以工作,但如果存在它就不会传递(如果存在它会更新)。我只是用另一种方法让它工作,但我很好奇为什么
谢谢大家! 您的更新
都有条件category=@v_category
您的if exists()
子查询不存在
我猜varid
是一个字符串。与整数的比较将变量
转换为整数
此外,我猜在转换之前正在检查类别。换句话说,有一行的v_varid
值不正确(即无法转换为整数),这一行的类别不匹配。表1
中varid
的数据类型是什么?@ZLK所有ID都是varchar(50)这是因为我将varID
与一个整数进行比较。我不知道我不能做到这一点,因为根据我目前的经验,SQL基本上是自己处理的。谢谢@在MinLee中,SQL Server将根据严格的规则隐式转换不同的数据类型。您是对的,SQL Server将处理转换,但在无法完成转换的情况下会出现错误。这可能取决于计划,所以这是一个等待发生的意外,这就是为什么显式匹配数据类型是最佳实践的原因之一。