【发布时间】:2016-10-05 20:51:45
【问题描述】:
我使用的是 SQL Server 2008。我有一个包含几列(A、B)的源表,其中包含要拆分为多列的字符串数据。我确实有已经写好的拆分功能。
源表中的数据(源表格式不能修改)用于正在创建的视图中。但我需要让我的视图已经从源表中拆分列 A 和 B 的数据。因此,我的视图将包含 Source 表中没有的额外列。
然后使用 Source 表填充的 View 与 Other Table 合并。
这里有两个问题:
我可以在创建视图时从源表中拆分列 A 和 B,但不更改源表吗?
如何在视图“选择”语句中使用我现有的用户定义函数来完成这项任务?
简而言之:
要拆分的字符串也显示在注释掉部分的示例中。几乎有 Destination 表、vStandardizedData View、SP,它使用 View 数据合并到 tblStandardizedData 表。因此,在我的 Source 列中,我需要在加载到 tblStandardizedData 表之前拆分列 A 和 B。
我正在处理五个对象:
- 源文件
- 目标表
- vStandardizedData 视图
- tblStandardizedData 表
- 合并的存储过程 (更新和插入)形成 vStandardizedData 视图。
注意:所有 5 个对象都按照它们应该被创建和加载的顺序列出。
与此不同的是,现有的 UDFunction 可以拆分我被告知要使用的字符串
A列(B列具有相同格式数据)中要拆分的字符串示例:
6667 Mission Street, 4567 7rd Street, 65 Sully Pond Park
期望的结果:
用户自定义函数返回一个表变量:
CREATE FUNCTION [Schema].[udfStringDelimeterfromTable]
(
@sInputList VARCHAR(MAX) -- List of delimited items
, @Delimiter CHAR(1) = ',' -- delimiter that separates items
)
RETURNS @List TABLE (Item VARCHAR(MAX)) WITH SCHEMABINDING
/*
* Returns a table of strings that have been split by a delimiter.
* Similar to the Visual Basic (or VBA) SPLIT function. The
* strings are trimmed before being returned. Null items are not
* returned so if there are multiple separators between items,
* only the non-null items are returned.
* Space is not a valid delimiter.
*
* Example:
SELECT * FROM [Schema].[udfStringDelimeterfromTable]('abcd,123, 456, efh,,hi', ',')
*
* Test:
DECLARE @Count INT, @Delim CHAR(10), @Input VARCHAR(128)
SELECT @Count = Count(*)
FROM [Schema].[udfStringDelimeterfromTable]('abcd,123, 456', ',')
PRINT 'TEST 1 3 lines:' + CASE WHEN @Count=3
THEN 'Worked' ELSE 'ERROR' END
SELECT @DELIM=CHAR(10)
, @INPUT = 'Line 1' + @delim + 'line 2' + @Delim
SELECT @Count = Count(*)
FROM [Schema].[udfStringDelimeterfromTable](@Input, @Delim)
PRINT 'TEST 2 LF :' + CASE WHEN @Count=2
THEN 'Worked' ELSE 'ERROR' END
【问题讨论】:
-
您没有提供足够的信息:请发布一个(或多个,如果不同的结构)字符串示例。大多数字符串拆分函数将返回一个记录集,从而导致每个字符串部分一个多行。如果您需要新列中的部分并排,您需要列标题和一些逻辑,哪些值在哪里......请显示更多详细信息!
-
刚刚添加了一些 UDF 代码。要拆分的字符串也显示在注释掉部分的示例中。几乎有 Destination 表、vStandardizedData View、SP,它使用 View 数据合并到 tblStandardizedData 表。因此,在我的 Source 列中,我需要在加载到 tblStandardizedData 表之前拆分列 A 和 B。
-
对不起,试着用我的头脑思考:我不知道你需要什么...这个 UDF 将返回一个 table。这意味着你必须加入它,你会得到很多行。但是在您的问题中,我阅读了 以拆分为多个列。分隔数据的结构是否合理?你知道一个字符串中的最大零件数吗?请提供一些实际的示例字符串和所需的输出。
-
最多可以是从 A 列派生的字符串的 5 个实例(B 列也是如此)。还只是添加了字符串的示例和所需的结果。至于 UDFunction 它已经写好了,我被告知要使用它来拆分。现在清楚了吗?
-
我正在处理五个对象:1) 源文件 2) 目标表 3) vStandardizedData 视图 4) tblStandardizedData 表 5) 合并(更新和插入)形成 vStandardizedData 的存储过程看法。注意:所有 5 个对象都按照它们应该被创建和加载的顺序列出。除此之外,还有一个现有的 UDFunction 可以拆分我被告知要使用的字符串。
标签: sql-server view merge split