我有一个函数在遇到回车符时将地址行拆分为4列。它是一个多语句表值函数。如何使用它从地址表中拆分地址行字段?我不能使用连接,因为它使用表字段作为参数。任何线索?
SELECT [ID], [ADDRESS_LINE] FROM [dbo].[ADDRESS]
该函数需要3个参数:Address_ID,Address字符串和回车符。
[dbo].[fn_Split_Address](ID, ADDRESS_LINE, CHAR(13))
帮助理解的示例:
SELECT A.Addresse_ID, A.Adresse_1, A.Adresse_2, A.Adresse_3,
A.Adresse_4 FROM RE7_Pass.[dbo].[fn_Split_Address](888999, '10
Burlington street' + CHAR(13) + 'Chicago'+ CHAR(13) +
'Illinois',CHAR(13)) AS A
结果如下:
答案 0 :(得分:4)
扩展Pawan的评论:
SELECT A.[ID],
A.[ADDRESS_LINE],
SA.Address1,
SA.Address2,
SA.Address3,
SA.Address4
FROM [dbo].[ADDRESS] A
CROSS APPLY [dbo].[fn_Split_Address] (A.ID, A.Address_Line, CHAR(13)) SA;
FROM
条款的文档很好地解释了如何从TVF获取数据:
Using APPLY
APPLY运算符的左右操作数都是表表达式。这些操作数之间的主要区别在于right_table_source可以使用表值函数,该函数将left_table_source中的列作为函数的参数之一。 left_table_source可以包含表值函数,但它不能包含来自right_table_source的列的参数。
它还在页面下方using CROSS APPLY提供了更多示例。他们提供的例子是:
USE master;
GO
SELECT dbid, object_id, query_plan
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);
GO