请大家帮我看一个sql存储过程,什么地方出错误了?找到了答案却不知道为什么,麻烦大家帮我详细解答一下 20

createprocproc_del@idsvarchar(30)asdeletefromdbo.UserInfowhereIdin(@ids)execproc_del'... create proc proc_del
@ids varchar(30)
as
delete from dbo.UserInfo where Id in(@ids)
exec proc_del '1,2'

错误为:消息 245,级别 16,状态 1,过程 proc_del,第 4 行
在将 varchar 值 '1,2' 转换成数据类型 int 时失败。

而用下面的存储过程却成功执行,不知道为什么。
alter proc proc_del
@ids varchar(30)
as
declare @sqlstr varchar(50)
set @sqlstr='delete from dbo.UserInfo where Id in('+@ids+')'
exec(@sqlstr)

exec proc_del '1,2'
展开
 我来答
骄闽雪3630
2011-01-04 · TA获得超过3427个赞
知道小有建树答主
回答量:2833
采纳率:0%
帮助的人:1400万
展开全部
停止SQL服务,备份你的置疑的数据库的数据文件.
然后启动SQL服务,再删除置疑的数据库

然后按下面的步骤处理:

1.新建一个同名的数据库

2.再停掉sql server(注意不要分离数据库)

3.用原数据库的数据文件覆盖掉这个新建的数据库

4.再重启sql server

5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)

6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用
数据库的脚本创建一个新的数据库,并将数据导进去就行了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5183fa6
2010-12-25 · TA获得超过130个赞
知道小有建树答主
回答量:184
采纳率:0%
帮助的人:154万
展开全部
第一个实际执行的是
delete from dbo.UserInfo where Id in('1,2')
第二个实际执行的是
delete from dbo.UserInfo where Id in(1,2)

'1,2' 在SQL隐形数据类型转换(varchar to int )时会失败,所以自然会报错,即使不报错也不会是你期望的结果,所以必须用第二种方式
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
牧之卉0j1
2010-12-25 · TA获得超过1151个赞
知道大有可为答主
回答量:1689
采纳率:0%
帮助的人:1733万
展开全部
1.in里面包含的是结果集,in(a,b,c) 会转化一列含abc共3行的结果集,in('1,2')转化为一行1,2的字符,在引擎与左边匹配的时候会默认转化为int 所以报错
2..print @sqlstr 看看,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
End灬琦琦
2010-12-25 · TA获得超过956个赞
知道小有建树答主
回答量:181
采纳率:0%
帮助的人:195万
展开全部
在UserInfo里面,id这一列是int类型的吧,多以和ids的varchar型有冲突
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式