Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL是否存在行为异常_Sql_Sql Server_Database - Fatal编程技术网

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将处理转换,但在无法完成转换的情况下会出现错误。这可能取决于计划,所以这是一个等待发生的意外,这就是为什么显式匹配数据类型是最佳实践的原因之一。