用户自定义表值函数问题(困惑)

skinny8306 2009-02-09 04:38:23
我做了一个用户自定义函数如下,为了解决将表一个字段,内容类似1n,2b,3c 拆分成三行,如下

CREATE FUNCTION [dbo].[f_Split_Column]
(
@fiscal_year int,
@half_index int,
@salestype varchar(50),
@tia_index varchar(50)
)
RETURNS @splittable TABLE
(
PL CHAR(4) NOT NULL --拆分后的字符串
)
AS
BEGIN
declare @str varchar(max)
declare @m int
declare @n int
declare @markStr char(1)
set @markStr=','

SELECT @str=pl FROM [SDO2].[dbo].[TIA]
WHERE FISCAL_YEAR=@fiscal_year
AND HALF_INDEX=@half_index
AND SALESTYPE=@salestype
AND TIA_INDEX=@tia_index;

if(RIGHT(@str,1)<>@markStr )
begin
set @str = @str + @markStr
end;
set @m=CHARINDEX(@markStr,@str)
set @n=0

declare @sql varchar(max)
set @sql=''
WHILE @m>0
BEGIN
INSERT INTO @splittable (PL) VALUES(substring(@str,@n,@m-@n))
set @n=@m+1
set @m=CHARINDEX(',',@str,@n)
END ;

RETURN;
END


如果我直接用查询 select * from SDO2.DBO.f_Split_Column(2009,1,'TC',1) 能得到正确的结果
如果我用查询 select * from productlines where productline_id in (select pl from SDO2.DBO.f_Split_Column(2009,1,'TC',1) )
便只能得到第一行数据。即,和其他表连接便只返回第一行数据

这是为何,在线等!急
...全文
90 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2009-02-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 skinny8306 的回复:]
问题解决了。终于找到问题。因为用户数据左边有空格,晕,所以关联不上。
感谢大家发言。结贴
[/Quote]
恭喜
skinny8306 2009-02-09
  • 打赏
  • 举报
回复
问题解决了。终于找到问题。因为用户数据左边有空格,晕,所以关联不上。
感谢大家发言。结贴
dawugui 2009-02-09
  • 打赏
  • 举报
回复
不清楚你具体的东西,不好妄言.
skinny8306 2009-02-09
  • 打赏
  • 举报
回复
你的提议很好,谢谢!
但是这个自定义函数为什么会是这样呢?
skinny8306 2009-02-09
  • 打赏
  • 举报
回复
select pl from SDO2.DBO.f_Split_Column(2009,1,'TC',1)

有多个结果
dawugui 2009-02-09
  • 打赏
  • 举报
回复
我看你的需求不需要用函数,这样即可.
假设你那个表为tb,列名col

select * from productlines m , tb n
where charindex(',' + n.productline_id + ',' , ',' + m.col + ',') > 0

select * from productlines m , tb n
where ',' + m.col + ',' like '%,' + n.productline_id + ',%'
dawugui 2009-02-09
  • 打赏
  • 举报
回复
select pl from SDO2.DBO.f_Split_Column(2009,1,'TC',1)

这个语句是不是只有一条结果?
skinny8306 2009-02-09
  • 打赏
  • 举报
回复
为何用表值函数,关联查询只能返回一行结果呢?
不明白表值函数的原理,请高手指点。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧