Выполнение конкатенации строк от строк данных в представлении TSQL (центр?)

Я хотел бы создать представление в SQL Server, который комбинирует несколько частей метаданных базы данных.

Одна часть метаданных я хочу жизни в 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!

Поскольку Вы видите, что данные в "текстовом" столбце разделяются на несколько строк, если это передает максимальную длину (символы на 8 000 байтов/4000 в SQL Server, 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, но результаты произвели текст, заполненный строками Escape XML.

6
задан David 25 January 2010 в 17:29
поделиться

4 ответа

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
13
ответ дан 8 December 2019 в 14:43
поделиться

Есть несколько возможных решений. Простейший - использовать CTE. Эта статья имеет хорошую дискуссию о теме: Согласительные значения строки в трансактировании-SQL

1
ответ дан 8 December 2019 в 14:43
поделиться

Почему не использовать SYS.SQL_Modules Определение столбцов, которые хранят данные как один Nvarchar (Max)?

Вместо того, чтобы читать несколько текста SysComments (Nvarchar (4000)) столбцов, распространяются по нескольким рядам и имели объединение.

SELECT object_id, definition FROM sys.sql_modules

Просто мысль ... Вы сказали просто: -)

1
ответ дан 8 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: