6

いくつかのデータベースメタデータを組み合わせたビューをSQLServerで作成したいと思います。

私が欲しいメタデータの1つがsys.syscommentsテーブルに存在します-関連する列は次のとおりです。

id   colid  text
---- ------ -------------
1001 1       A comment.
1002 1       This is a lo
1002 2       ng comment.
1003 1       This is an e
1003 2       ven longer c
1003 3       omment!

ご覧のとおり、「テキスト」列のデータは、最大長(SQLServerでは8000バイト/4000文字、私の例では12文字)を超えると複数の行に分割されます。colidテキストを組み立てる順序を識別します。

ビューでクエリ/サブクエリを作成して、sys.syscommentsテーブルからコメントを再アセンブルしたいので、次のようになります。

id   comment (nvarchar(max))
---- ----------------------------------
1001 A comment.
1002 This is a long comment.
1003 This is an even longer comment!

何か提案や解決策はありますか?速度は決して重要ではありませんが、単純さと影響が少ないことが重要です(CLR関数などは避けたいです。理想的にはすべてがビュー定義にまとめられます)。XMLベースの提案をいくつか調べましたが、その結果、XMLエスケープ文字列で満たされたテキストが生成されました。

4

4 に答える 4

13
SELECT  id,
        (
        SELECT  text AS [text()]
        FROM    mytable mi
        WHERE   mi.id = md.id
        ORDER BY
                mi.col
        FOR XML PATH(''), TYPE
        ).value('/', 'NVARCHAR(MAX)')
FROM    (
        SELECT  DISTINCT id
        FROM    mytable
        ) md
于 2010-01-25T17:43:47.400 に答える
1

データを単一のnvarchar(max)として格納するsys.sql_modules定義列を使用してみませんか?

複数のsyscommentsテキスト(nvarchar(4000))を読み取る代わりに、列が複数の行にまたがって連結する必要があります。

SELECT object_id, definition FROM sys.sql_modules

ちょっと考えて...あなたは簡単に言った:-)

于 2010-01-25T19:52:02.040 に答える
1

いくつかの可能な解決策があります。最も簡単な方法は、CTEを使用することです。この記事では、「 Transact-SQLでの行の値の連結」というトピックについて十分に説明しています。

于 2010-01-25T17:34:40.997 に答える
1

ここを見てください:複数の行から順序付けられた1つの列への値の連結

于 2010-01-25T17:36:01.993 に答える