--返回类型:表(table)Create Function FunTest( @Para1 Type(Length), @Para2 Type(Length), --…… @ParaN Type(Length))return @Table table( Col1 Type(Length), Col2 Type(Length), --…… ColN Type(Length))asbegin --【函数实体】 --填充表数据内容 --……Insert into @Table…… --……Update @Table set…… return end --存储过程--返回数据表Create Proc ProcTest( @Para1 Type(Length), @Para2 Type(Length), --…… @ParaN Type(Length) )as --表变量定义declare @Table table( Col1 Type(Length), Col2 Type(Length), --…… ColN Type(Length)) declare @P1 Type(Length)--……declare @PN Type(Length) begin 【存储过程实体】 Insert into @Table select * from FunTest(参数) where (条件)<与SQL查询语句一致> --…… --…… select * from @Tableend
CREATE function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10)) returns @temp table(a varchar(100)) /*--实现split功能的函数*/ as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@SourceSql) while @i>=1 begin insert @temp values(left(@SourceSql,@i-1)) set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i) set @i=charindex(@StrSeprate,@SourceSql) end if @SourceSql<>'\' insert @temp values(@SourceSql) return end --1.在存储过程中调用返回表的函数 CREATE PROC Test1 AS SELECT * FROM dbo.f_split('1,2,3',',')EXEC Test1 /* a --------- 1 2 3 (3 行受影响)*/ --存储过程中把这个函数的返回值赋给一个变量 CREATE PROC Test2 AS DECLARE @TB TABLE(id int) INSERT @TB SELECT * FROM dbo.f_split('1,2,3',',') SELECT * FROM @TBEXEC Test2 /* id ----------- 1 2 3(3 行受影响)*/
--返回类型:表(table)Create Function FunTest( @Para1 Type(Length), @Para2 Type(Length), --…… @ParaN Type(Length))return @Table table( Col1 Type(Length), Col2 Type(Length), --…… ColN Type(Length))asbegin --【函数实体】 --填充表数据内容 --……Insert into @Table…… --……Update @Table set…… return end --存储过程--返回数据表Create Proc ProcTest( @Para1 Type(Length), @Para2 Type(Length), --…… @ParaN Type(Length) )as --表变量定义declare @Table table( Col1 Type(Length), Col2 Type(Length), --…… ColN Type(Length)) declare @P1 Type(Length)--……declare @PN Type(Length) begin 【存储过程实体】 Insert into @Table select * from FunTest(参数) where (条件)<与SQL查询语句一致> --…… --…… select * from @Tableend
returns @temp table(a varchar(100))
/*--实现split功能的函数*/
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>'\'
insert @temp values(@SourceSql)
return
end --1.在存储过程中调用返回表的函数
CREATE PROC Test1
AS
SELECT * FROM dbo.f_split('1,2,3',',')EXEC Test1
/*
a
---------
1
2
3
(3 行受影响)*/
--存储过程中把这个函数的返回值赋给一个变量
CREATE PROC Test2
AS DECLARE @TB TABLE(id int) INSERT @TB
SELECT * FROM dbo.f_split('1,2,3',',') SELECT * FROM @TBEXEC Test2
/*
id
-----------
1
2
3(3 行受影响)*/