日期:2014-05-18  浏览次数:20511 次

多语句表值函数问题?
一个问题:
函数function_1是一个多语句表值函数,有唯一标量输入参数记为parament.
其中参数Parameter来自一张表table_1(行数目不多)中的一列.
请问:对于每一个参数Parameter,如何快捷求出对应的function_1的表值,并标注来源参数?

------解决方案--------------------
这个,如果2005 的话,参考一下apply的用法

USE tempdb
GO

-- 用于分拆字符串的表值函数
CREATE FUNCTION dbo.f_Split(
@str varchar(max)
)RETURNS @re TABLE(
id int IDENTITY, val varchar(10))
AS
BEGIN
DECLARE @pos int
SET @pos = CHARINDEX(',', @str)
WHILE @pos > 0
BEGIN
INSERT @re(val) VALUES(LEFT(@str, @pos - 1))
SELECT
@str = STUFF(@str, 1, @pos, ''),
@pos = CHARINDEX(',', @str)
END
IF @str > ''
INSERT @re(val) VALUES(@str)
RETURN
END
GO

-- 用于分拆的示例数据
DECLARE @tb TABLE(
col varchar(max))
INSERT @tb
SELECT col = '1,2,3' UNION ALL
SELECT col = NULL UNION ALL
SELECT col = '' UNION ALL
SELECT col = '1'

-- 使用 CROSS APPLY
SELECT *
FROM @tb A
CROSS APPLY dbo.f_Split(A.col) B

-- 使用 OUTER APPLY
SELECT *
FROM @tb A
OUTER APPLY dbo.f_Split(A.col) B
GO

-- 删除演示数据
DROP FUNCTION dbo.f_Split