如下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)就通过,这是为什么啊?
展开
 我来答
邋遢道神通7
2012-03-08 · TA获得超过406个赞
知道小有建树答主
回答量:236
采纳率:37%
帮助的人:110万
展开全部
直接放到IN后面的括号中改成IN(1,2) --------------这个可以通过,因为in(1,2,3,4,5)表示id在这些数中的一个,逗号只是用来区分2个值(12,3)是2个值(1,2,3)是3个值,,这是为什么放后面能通过的原因。

你定义的varchar 是字符串, 变量是字符串型,'1,2' 有3个字符,这3个字符分别是'1' , ',' , '2'。这就是说为什么你放后面会错,因为这3个是字符,逗号怎么转变成整数。
百度网友be7552a4d
2012-03-08 · 超过32用户采纳过TA的回答
知道答主
回答量:126
采纳率:0%
帮助的人:78.6万
展开全部
DECLARE @ids VARHCAR(50)
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)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gaoxuhong888
2012-03-08 · 超过19用户采纳过TA的回答
知道答主
回答量:127
采纳率:100%
帮助的人:41.4万
展开全部
你的@ids是字符类型的,id应该是数字整形,这样转换的时候就会报错。1,2无法转换为数字
追问
谢谢你的回答!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式