sql server 存错存储过程 参数拼接拼接sql 问题

SQL Server通过储存过程实现批量删除注意事项_数据库技术_Linux公社-Linux系统门户网站
你好,游客
SQL Server通过储存过程实现批量删除注意事项
来源:Linux社区&
作者:jinbiao520
这里设定传过来的参数是拼接好的字符串,如:1,2,3,4,5
create procedure up_batchDeleteById
&&& @condition varchar(max)
delete from dt_name where id in(@condition)
以上的做法看似正确,实际会报错,具体原因是说id是int类型的,而@condition是字符串类型,这样无法删除
正确做法:
create procedure up_batchDeleteById
&&& @condition varchar(max)
declare @sql varchar(max)
set @sql='delete from dt_name where id in (' + @condition + ')'
exec(@sql)
相关资讯 & & &
& (03/17/:28)
& (03/09/:28)
& (11/21/:05)
& (03/13/:46)
& (03/08/:36)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
lallalal 发表于 bucuo解决存储过程中SQL字符串语句执行引入参数的问题
解决存储过程中SQL字符串语句执行引入参数的问题
最近在写存储过程的时候,发现一个问题,是关于存储过程中字符串SQL中引入参数的问题。
且看下例:
declare @count int &
select @count=count(*) from student where Name in ('Chamy','Jundy') &
print @count &
如果我们要在上面句子中In后面引入参数:
那必须这么写:
declare @count int &
declare @Names nvarchar(200) &
set @Names='''Chamy'',''Jundy''' &
declare @sql nvarchar(500) &
set @sql='select @count=count(*) from student where Name in ('+@Names+')' &
exec(@sql) &
print @count &
这里我们选择打印了@count参数,但是发现SQL执行会报错,显示@count参数没有定义。想过才发现,由于我们exec的只是@sql里的SQL语句,确实是没有定义@count参数的。而作为一个公用的参数,如果我想在@sql语句执行完后依然得到@count参数,那应该如何处理?
经过查找各种资料以及询问资深的SQL开发人员,得到以下方式来解决如上问题:
declare @count int &
declare @Names nvarchar(200) &
set @Names='''Chamy'',''Jundy''' &
declare @sql nvarchar(500) &
set @sql='select @count=count(*) from student where Name in ('+@Names+')' &
EXEC sp_executesql @sql,N'@count int OUTPUT',@count OUTPUT &
print @count &
我们注意到,能过在sp_executesql这个存储过程中执行@sql参数,并重新定义@count参数,并使用@sql之外的参数@count进行输出,就能很好的处理参数传入的问题。2017年1月 总版技术专家分月排行榜第二
2016年12月 总版技术专家分月排行榜第三
2017年1月 总版技术专家分月排行榜第二
2016年12月 总版技术专家分月排行榜第三
2017年1月 总版技术专家分月排行榜第二
2016年12月 总版技术专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。新手求助一个SQL Server存储过程的迭代或者嵌套之类的写法_sqlserver吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:19,492贴子:
新手求助一个SQL Server存储过程的迭代或者嵌套之类的写法收藏
表名 Zoning地区区划 列包括:PK_ID主键,自增 ,FK_ParentID,父节点的IDName,地区名称需要实现的查询是:传入一个地区名称,查询该地区所有最小子节点(孙节点)的所有信息举例: 传入Name = 河北省, 河北省的ID = 1石家庄市(ID=2,ParentID=1)唐山市(ID=3,ParentID=1)保定市(ID=4,ParentID=1)裕华区(ID=5,ParentID=2)桥东区(ID=6,ParentID=2)体育大街(ID=7,ParentID=5)天山大街(ID=8,ParentID=6)输出的时候,是输出 体育大街,天山大街,唐山,保定我的想法是,先写一个存储过程,传入一个ID,返回所有父节点为该ID的子 节点. 然后另外一个存储过程里,写循环和判断,如果返回值不为空,继续调用, 直到查不到更下级的信息,然后返回.继续下一次循环查询.但是不知道逻辑怎么写,求高手指导点拨,最好能写出代码.补充一下,节点层级不确定,所以需要一个循环判断来确定是否是最小节点了...就是不知道如何用SQL来实现.
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 mysql存储过程拼接sql 的文章

 

随机推荐