SQL中函数返回表,传递一个参数,无法唤醒用户自定义函数,解决方法!

发表于:2007-06-07来源:作者:点击数: 标签:
1: 把函数改成标量函数,及只返回一个值的方法,该方法根据具体情况修改既可.在此不讨论该方法 2:用游标处理,用户自定义函数返回表. 具体问题: CREATE function 函数(@字段1 as varchar(20),@字段2 as int ,@字段3 int) returns @Time table(列1 varchar(20),

1: 把函数改成标量函数,及只返回一个值的方法,该方法根据具体情况修改既可.在此不讨论该方法

2:用游标处理,用户自定义函数返回表.

具体问题:

CREATE function 函数(@字段1 as varchar(20),@字段2 as int ,@字段3 int)
returns @Time  table(列1  varchar(20),列2 datetime,列3 varchar(8000))
as
begin
--一系列操作后,插入数据到@Time
end

select dbo.函数('a',1,2,3)

返回正确结果


现在我就是想把函数参数,换成一个表的变量来代替!!

select dbo.函数(a.column1,a.coulmn2,coulmn3,a.column4) from 表 a

就不行。请问怎么改?一定要改成标量函数吗??

这样的话可以用游标,不过性能很低

if exists(select 1 from [tempdb]..[sysobjects] where id=object_id('[tempdb]..[#]'))
drop table [tempdb]..[#]
go
create table #(列1  varchar(20),列2 datetime,列3 varchar(8000))
declare cur cursor for select column1,column2,column3 from 表
open cur
declare @column1 varchar(20)
declare @column2 varchar(20)
declare @column3 varchar(20)
fetch next from cur into @column1,@column2,@column3
while @@fetch_status=0
begin
     insert # select * from [dbo].函数(@column1,@column2,@column3)
     fetch next from cur into @column1,@column2,@column3
end
close cur
deallocate cur

select * from #
drop table #


原文转自:http://www.ltesting.net