Я хотел бы создать представление в 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.
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
Есть несколько возможных решений. Простейший - использовать CTE. Эта статья имеет хорошую дискуссию о теме: Согласительные значения строки в трансактировании-SQL
Посмотрите здесь: Concateнатные значения из нескольких строк в один столбец заказали
Почему не использовать SYS.SQL_Modules Определение столбцов, которые хранят данные как один Nvarchar (Max)?
Вместо того, чтобы читать несколько текста SysComments (Nvarchar (4000)) столбцов, распространяются по нескольким рядам и имели объединение.
SELECT object_id, definition FROM sys.sql_modules
Просто мысль ... Вы сказали просто: -)