请大家帮我看一个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' 展开
@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' 展开
展开全部
停止SQL服务,备份你的置疑的数据库的数据文件.
然后启动SQL服务,再删除置疑的数据库
然后按下面的步骤处理:
1.新建一个同名的数据库
2.再停掉sql server(注意不要分离数据库)
3.用原数据库的数据文件覆盖掉这个新建的数据库
4.再重启sql server
5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)
6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用
数据库的脚本创建一个新的数据库,并将数据导进去就行了.
然后启动SQL服务,再删除置疑的数据库
然后按下面的步骤处理:
1.新建一个同名的数据库
2.再停掉sql server(注意不要分离数据库)
3.用原数据库的数据文件覆盖掉这个新建的数据库
4.再重启sql server
5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)
6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用
数据库的脚本创建一个新的数据库,并将数据导进去就行了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个实际执行的是
delete from dbo.UserInfo where Id in('1,2')
第二个实际执行的是
delete from dbo.UserInfo where Id in(1,2)
'1,2' 在SQL隐形数据类型转换(varchar to int )时会失败,所以自然会报错,即使不报错也不会是你期望的结果,所以必须用第二种方式
delete from dbo.UserInfo where Id in('1,2')
第二个实际执行的是
delete from dbo.UserInfo where Id in(1,2)
'1,2' 在SQL隐形数据类型转换(varchar to int )时会失败,所以自然会报错,即使不报错也不会是你期望的结果,所以必须用第二种方式
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.in里面包含的是结果集,in(a,b,c) 会转化一列含abc共3行的结果集,in('1,2')转化为一行1,2的字符,在引擎与左边匹配的时候会默认转化为int 所以报错
2..print @sqlstr 看看,
2..print @sqlstr 看看,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在UserInfo里面,id这一列是int类型的吧,多以和ids的varchar型有冲突
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询