一、存 储过程调用标量值函数
先建一个标量值函数,如
CREATE FUNCTION [dbo].[F_Num]
(
@a nvarchar(50)
)
RETURNS nvarchar(50)
AS
BEGIN
declare @m nvarchar(50)
select @m=@a+'aad'
return @m
END
接下来
在存储过程中可以直接如下调用:
select Title,Content,(select dbo.F_Num(Content)) as a from tb_News where ID='BH100001'
或者:
declare @char nvarchar(20)
set @char=dbo.F_Num('ddddadqqqqq')
二、存储过程调用存储过程,写法一般是(个人总结的,不对的请见谅)
1、在被调用的存储过程里,我个人觉得应该写一个输出参数,如:
create PROCEDURE [dbo].[P_GetMaxVersion]
@tablename varchar(50),
@version int output
AS
set @version=2
end
在调用存储过程里,写上
declare @Version int
exec P_GetMaxVersion 'BaseClient',@Version output
那@Version就被赋上了值2
2、创建一个临时表
create proc GetUserName
as
begin
select 'UserName'
end
Create table #tempTable (userName nvarchar(50))
insert into #tempTable(userName)
exec GetUserName
select #tempTable
3、第三种方法:声明一个变量,用exec(@sql)执行(注:这种方法我也没测试过,我是在网上摘抄的,以备用)
declare @rsql varchar(250)
declare @csql varchar(300)
declare @rc nvarchar(500)
declare @cstucount int
declare @ccount int
set @rsql='(select Classroom_id from EA_RoomTime where zc='+@zc+' and xq='+@xq+' and T'+@time+'=''否'') and ClassroomType=''1'''
--exec(@rsql)
set @csql='select @a=sum(teststucount),@b=sum(classcount) from EA_ClassRoom where classroom_id in '
set @rc=@csql+@rsql
exec sp_executesql @rc,N'@a int output,@b int output',@cstucount output,@ccount output--将exec的结果放入变量中的做法
--select @csql+@rsql
--select @cstucount
以上纯属是个人的一些感想,也没认真的测试过,有错的话,请大家指正。