我正在使用SQL Server 2008.我有一個包含字符串數據的幾列(A,B)的源表,以便將其拆分爲多個列。我確實有這樣的功能,就是已經寫好的分割。將單列拆分爲多個並將其加載到表或視圖
源表中的數據(源表格式無法修改)用於創建的視圖中。但我需要讓我的視圖已經從源表中爲列A和B分割數據。所以,我的視圖將有額外的列不在源表中。
然後,使用源表填充的視圖用於與其他表合併。
有兩種問題在這裏:
我可以創建一個視圖時,但不更改源表源表拆分列A和B?
如何在視圖「選擇」語句中使用我現有的用戶定義函數來完成此任務?
Idea在短:
字符串分割也被示出在註釋部分的示例。幾乎有目標表,vStandardizedData視圖,SP使用視圖數據合併到tblStandardizedData表。所以,在我的Source列中,我需要在加載到tblStandardizedData表之前拆分A和B列。
有跡象表明,我的工作五保對象:
- 源文件
- 目標表
- vStandardizedData查看
- tblStandardizedData表
- 存儲過程,它合併 (更新和插入)形成vStandardizedData視圖。
注意:所有5個對象都按照它們應該創建和加載的順序列出。
與此獨立地存在現有UDFunction可拆分其中我被告知在列A使用的字符串的
實施例(B欄具有相同的格式的數據)要拆分的字符串:
6667 Mission Street, 4567 7rd Street, 65 Sully Pond Park
期望的結果:
ù ser-defined函數返回一個表變量:
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
你沒有提供足夠的信息:請郵政一個(或幾個,如果不同的結構),字符串的例子。大多數字符串分割函數將返回一個記錄集,因此每個字符串部分導致多行一個。如果您需要新欄目中的部件*並排*,您需要列標題和一些邏輯值哪裏去...請顯示更多詳細信息! – Shnugo
只需添加一些UDF代碼。要註釋的字符串也顯示在註釋掉的部分的示例中。幾乎有目標表,vStandardizedData視圖,SP使用視圖數據合併到tblStandardizedData表。所以,在我的Source列中,我需要在加載到tblStandardizedData表之前拆分A和B列。 – enigma6205
對不起,試着用腦子想:我不知道你需要什麼......這個UDF將返回一個**表**。這意味着你必須加入它,你會得到很多行。但在你的問題,我讀*分裂成多個列*。劃分的數據是否體面結構?你知道一個字符串內部件的最大數量嗎?請提供一些實際的樣本字符串和所需的輸出。 – Shnugo