私はSQL Server 2008を使用しています。複数の列に分割する文字列データを含むいくつかの列(A、B)を持つソーステーブルがあります。私は分割がすでに書かれている機能を持っています。単一の列を複数に分割してテーブルまたはビューにロード
ソーステーブルのデータ(ソーステーブル形式は変更できません)は、作成されたビューで使用されます。しかし、私のビューは、ソーステーブルから列AとBのデータを既に分割しておく必要があります。だから、私のビューは、ソーステーブルにない余分な列があります。
次に、ソーステーブルを使用して読み込まれたビューを使用して、他のテーブルとマージします。
あり二つの質問ここに:
は、ビューを作成するときに、私は、ソース表から列AとBを分割することができますが、ソース表を変更しないでください?
このタスクを実行するには、ビュー "選択"ステートメントで既存のユーザー定義関数を使用する方法はありますか?要するに
アイデア:
文字列分割するもコメントアウトセクションに一例が示されています。ほとんどの場合、Destinationテーブル、vStandardizedData View、Viewデータを使用してtblStandardDataテーブルにマージするSPがあります。ですから、私のSource列には、tblStandardDataテーブルにロードする前に分割する必要があるカラムAとBがあります。
私が働いている5つのオブジェクトがあります。
- ソースファイル
- 宛先表 (更新をマージし
- vStandardizedDataビュー
- tblStandardizedDataテーブル
- ストアドプロシージャは、と挿入)してvStandardizedData Viewを作成します。
注:5つのオブジェクトすべてが、作成されてロードされると想定される順序でリストされます。
:このから別に私は分割する(列Bは、同じ形式のデータを有する)列A内の文字列の
例を使用するように言われた文字列を分割することができ、既存のUDFunctionあります
6667 Mission Street, 4567 7rd Street, 65 Sully Pond Park
所望の結果:
U read this: How to create a Minimal, Complete, and Verifiable exampleにあり、
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
あなたが十分な情報を提供していません。してくださいポステ1つ(または複数の、異なる構造であれば)文字列の例。ほとんどの文字列分割関数はレコードセットを返すので、各文字列部分に1つずつ多くの行が作成されます。新しい列*に並んでいる部品が必要な場合は、列見出しと値が必要なロジックが必要です。詳細を表示してください! – Shnugo
いくつかのUDFコードを追加しました。分割する文字列は、コメントアウトされたセクションの例にも示されています。ほとんどの場合、Destinationテーブル、vStandardizedData View、Viewデータを使用してtblStandardDataテーブルにマージするSPがあります。ですから、私のSource列には、tblStandardDataテーブルにロードする前に分割する必要があるカラムAとBがあります。 – enigma6205
申し訳ありませんが、私の頭で考えてみてください:私はあなたが何を必要としているか分かりません...このUDFは**テーブル**を返します。これはあなたがそれに参加しなければならないことを意味し、あなたは多くの行を得るでしょう。しかしあなたの質問では、複数の列に分割する*を読んでいます。区切られたデータは適切な構造になっていますか?あなたは1つの文字列内の部品の最大数を知っていますか?いくつかの実際のサンプル文字列と目的の出力を提供してください。 – Shnugo