sql自定义函数问题

[复制链接]
查看11 | 回复3 | 2010-5-18 11:10:58 | 显示全部楼层 |阅读模式
/*
将多个数组转换为表
第一个数组是主表,另一个数组为从表
分隔符如果null则使用英文逗号
*/
create function ArrayToTable
(
@primaryAry nvarchar(4000),
@valueAry nvarchar(4000),
@splitChr nvarchar(10)
)
returns @tb table([id] nvarchar(50),value nvarchar(500))
as
begin
/*declare
@primaryAry nvarchar(4000),
@valueAry nvarchar(4000),
@splitChr nvarchar(10)
select @primaryAry='1,2,3,4,',@valueAry='1,5,9,8,',@splitChr=','
declare @tb table([id] nvarchar(50),value nvarchar(500))
*/
declare @p nvarchar(50),@v nvarchar(50),@i int
select @primaryAry=isnull(dbo.trimString( @primaryAry,@splitChr)+',',''),
@valueAry=isnull(dbo.trimString(@valueAry,@splitChr)+',',''),
@splitChr=isnull(@splitChr,',')
if @splitChr=''
set @splitChr=','
declare @pcount int,@vcount int
select @pcount=isnull(dbo.ArrLen(@primaryAry,@splitChr),0),@vcount=isnull(dbo.ArrLen(@valueAry,@splitChr),0),@i=0
if @pcount=@vcount and @pcount>0
begin
while @i<@pcount
begin
select @p=dbo.arrlist(@primaryAry,',',@i),@v=dbo.arrlist(@valueAry,',',@i)
--添加到表变量中

insert into @tb values(@p,@v)
set @i=@i+1
end
end

--select * from@tb

return @tb
end
帮忙看看 为什么老是出 [必须声明标量变量 "@tb"。] 的错误?
如果在声明一个@tb 就会再多出一个[只能声明一个@tb...]的错误
问题已经解决,希望有能说出正确答案的!!

回复

使用道具 举报

千问 | 2010-5-18 11:10:58 | 显示全部楼层
return @tb把@tb去掉就行了调用如下:select * from dbo.ArrayToTable('','','')
回复

使用道具 举报

千问 | 2010-5-18 11:10:58 | 显示全部楼层
create function ArrayToTable( @primaryAry nvarchar(4000), @valueAry nvarchar(4000), @splitChr nvarchar(10))returns @tb table([id] nvarchar(50),value nvarchar(500))这
回复

使用道具 举报

千问 | 2010-5-18 11:10:58 | 显示全部楼层
把return @tb删掉。多语句表值函数,不需要返回表变量。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行