如下sql语句报错: DECLARE @ids VARCHAR(50) SET @ids='1,2' DELETE FROM Tab WHERE ID IN(@ids)
错误信息:消息245,级别16,状态1,第3行在将varchar值'1,2'转换成数据类型int时失败。但是我将字符串'1,2'直接放到IN后面的括号中改成IN(1,2)...
错误信息:
消息 245,级别 16,状态 1,第 3 行
在将 varchar 值 '1,2' 转换成数据类型 int 时失败。
但是我将字符串'1,2'直接放到IN后面的括号中改成IN(1,2)就通过,这是为什么啊? 展开
消息 245,级别 16,状态 1,第 3 行
在将 varchar 值 '1,2' 转换成数据类型 int 时失败。
但是我将字符串'1,2'直接放到IN后面的括号中改成IN(1,2)就通过,这是为什么啊? 展开
展开全部
DECLARE @ids VARHCAR(50)
DECLARE @prostr VARCHAR(MAX)
SET @ids='1,2'
SET @prostr='DELETE FROM tab WHERE id IN ('+@ids+')'
exec (@prostr)
DECLARE @prostr VARCHAR(MAX)
SET @ids='1,2'
SET @prostr='DELETE FROM tab WHERE id IN ('+@ids+')'
exec (@prostr)
追问
如果出现类似的情况的话(比如在存储过程里面)必须要改成动态sql吗?
追答
对啊。
例如要对列做动态计算时,如,传递一个月份参数,然后对相应月份进行统计、更新等。
如,给出参数是2月,而你表中有。a1 是1月,a2是2月……,那么你要统计2月的和。
SELECT SUM(a2) FROM 表
但由于传递的参数是:@month
所以需要转化成:str='SELECT SUM(a'+@month+') FROM 表'
exec (str)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的@ids是字符类型的,id应该是数字整形,这样转换的时候就会报错。1,2无法转换为数字
追问
谢谢你的回答!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询