0

3 つのフィールドを持つ結果セットがあり、これらの各フィールドは null であるか、コンマ区切りの文字列リストを含んでいます。

3 つすべてを 1 つのコンマ区切りリストに結合し、重複を排除する必要があります。

それを行う最善の方法は何ですか?

文字列を分割してテーブルを返すことができる素晴らしい関数を見つけました。

T-SQL 分割文字列

3 つの varchar パラメーターを取り、その分割文字列関数を 3 回呼び出し、それらを 1 つのテーブルに結合し、そこから FOR XML を使用して 1 つのコンマ区切り文字列として返す UDF を作成しようとしました。

しかし、SQL は関数内に SELECT があると不平を言っています。

4

2 に答える 2

0

単一のフィールドにコンマ区切りの文字列としてデータを保存しません。文字列を新しいテーブルに分割し、必要に応じて再度文字列に結合します。

重複の検索とデータの管理もはるかに簡単になります。

以前にこの関数を使用したことがあります (書いていないので、残念ながらどこで見つけたか思い出せません)。文字列を分割し、キー (この場合はint) を別のテーブルとしてデータに追加し、オリジナルのテーブルPK

CREATE FUNCTION SplitWithID (@id int, @sep VARCHAR(10), @s VARCHAR(MAX))
RETURNS @t TABLE
    (
        id int,
        val VARCHAR(MAX)
    )   
AS
    BEGIN
        DECLARE @xml XML
        SET @XML = N'<root><r>' + REPLACE(@s, @sep, '</r><r>') + '</r></root>'
        INSERT INTO @t(id,val)
        SELECT @id, r.value('.','VARCHAR(40)') as Item
        FROM @xml.nodes('//root/r') AS RECORDS(r)
        RETURN
    END
GO

別々の行にデータを配置したら、主キーをテーブルに適用する前に、任意の重複削除手法を使用してデータを消去できます。

于 2013-10-17T16:26:29.527 に答える