Обычно люди используют STUFF()
, чтобы удалить начальную запятую, вместо этих грязных преобразований и LEN()
вычислений.Например:
SELECT V1.PRODUCT,
TEXT_CODE = STUFF
(
(
(SELECT ',' + V2.TEXT_CODE
FROM dbo.V_PROD_MANU_SUB AS V2
WHERE V1.PRODUCT = V2.PRODUCT
ORDER BY V2.F_COUNTER
FOR XML PATH, TYPE).value('.[1]','nvarchar(max)')
),
1,1,N'')
FROM dbo.V_PROD_MANU_SUB AS V1
GROUP BY V1.PRODUCT;
-- much easier in SQL Server 2017 with STRING_AGG()
Но это, похоже, не имеет никакого отношения к тому, зачем вам в первую очередь материализовывать разделенный запятыми список, независимо от того, содержит ли он запятую или нет.
Индексированные представления часто являются формой преждевременной оптимизации.По сути, вы говорите: «Стоимость запроса этих данных будет намного больше, чем стоимость их обслуживания».Вы это знаете?Как?Какой у вас баланс рабочей нагрузки (читай: пиши)?Насколько медленный сейчас запрос?Как часто это работает?Сколько времени занимают обновления?
Если вы это знаете, вам повезет, материализуя их на свой собственный стол, вручную, через триггер.Индексированное представление вполне может оказаться тупиком по разным причинам.