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;

 

posted @ 2020-08-31 22:23  温故纳新  阅读(483)  评论(0编辑  收藏  举报