首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

多语句表值函数有关问题

2012-04-14 
多语句表值函数问题?一个问题:函数function_1是一个多语句表值函数,有唯一标量输入参数记为parament.其中

多语句表值函数问题?
一个问题:
函数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

热点排行