码迷,mamicode.com
首页 > 数据库 > 详细

存储过程中动态执行SQL并获取返回结果

时间:2016-09-14 12:41:18      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

很久没有写存储过程了,因为存储过程违背OOP精神,话说带了参数的存储过程,如果业务需求改变,改存储过程还真的挺麻烦的。所以现在比较倾向于负责的业务逻辑在业务层去处理,业务层专门做业务层的事情。

 

通过一层巧妙地包装,动态执行SQL语句就解决了

ALTER procedure [dbo].[PROC_NextSteps]
(
@Count int,
@IDS NVARCHAR(500),
@Rules NVARCHAR(MAX),
@IDSOut NVARCHAR(500) OUT
)
as
BEGIN
set @Rules=UPPER(@Rules);
set @IDSOut=‘‘
declare @index int
set @index=1;

WHILE(@index<=@Count)
BEGIN
DECLARE @SplitRule NVARCHAR(MAX),@Value int
select @SplitRule=dbo.F_SplitOfIndex(@Rules,|,@index)

if(CHARINDEX(SELECT,@SplitRule)=1)
begin
declare @sql nvarchar(1000)
select @sql=Nselect @Value=(+@SplitRule+)
 exec sp_executesql  @sql, N@Value int out,@Value out
end
ELSE IF(CHARINDEX(PROC_,@SplitRule)=1)
BEGIN
exec @Value =  @SplitRule
END
ELSE
BEGIN
set  @Value =  @SplitRule
END
if(@Value>=1)
begin
select @IDSOut=@IDSOut+dbo.F_SplitOfIndex(@IDS,|,@index)+|
end
set @index=@index+1
end
if(@IDSOut<>‘‘)
begin
set @IDSOut=LEFT(@IDSOut,LEN(@IDSOut)-1)
end

END

declare @res nvarchar(1000)
EXEC [dbo].[proc_nextsteps] 3,‘id1|id2|id3‘,‘SELECT COUNT(1) FROM dbo.A_CDKey|PROC_B|0‘,@res OUT
print @res

 

存储过程中动态执行SQL并获取返回结果

标签:

原文地址:http://www.cnblogs.com/njcxwz/p/5871214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!