Sql Server 存储过程、标量函数、表值函数和游标示例
存储过程示例
go create proc Proc_Test ( /* 存储过程示例 调用示例: exec Proc_Test 1,'测试' */ @para1 int ,@para2 nvarchar(100) ,@para3 nvarchar(100)='默认参数值' ) with recompile as begin -- 不返回计数 set nocount on; select @para1 '@para1',@para2 '@para2',@para3 '@para3' end go
调用示例运行结果:
标量函数示例
go create function FN_ReturnValue ( /* 标量函数示例 调用方法 select dbo.FN_ReturnValue(1,2) '标量值函数测试' */ @para1 int ,@para2 int ) returns int as begin return @para1+@para2; end go
调用示例运行结果:
内嵌表值函数示例
go create function IF_InnerTable ( /* 内嵌表值函数示例 调用方法 select * from IF_InnerTable(1,'') */ @para1 int ,@para2 nvarchar(20) ) returns table as return ( select @para1 '@para1',@para2 '@para2' )
调用示例运行结果:
表值函数示例
go create function TF_ReturnTable ( /* 表值函数示例 调用方法 select * from dbo.TF_ReturnTable(1,2) */ @para1 int ,@para2 int ) returns @resTable table(paras int) as begin -- 函数里不能使用临时表,可以用表变量替代 declare @temp_table table(paras int); -- 将所有参数值插入到临时表变量中 insert into @temp_table(paras) select @para1 union select @para2 -- 插入数据到返回结果表 insert into @resTable(paras) select paras from @temp_table return ; end go
调用示例运行结果:
游标示例
-- 定义业务参数接收游标值 declare @id int declare @name varchar(20) -- 定义游标 declare mycursor cursor for select id,name from ${t111}; -- 这里修改表名 -- 打开游标 open mycursor; -- 使用游标 fetch next from mycursor into @id,@name;-- 游标里有几列就要赋值给几个业务参数 while(@@FETCH_STATUS=0) --0表示执行成功 begin -- 业务逻辑 update ${t111} set id=@id+1 where id=@id; fetch next from mycursor into @id,@name; end -- 关闭游标 close mycursor; -- 释放游标 deallocate mycursor;