String_agg в SQL Server 2016
Вот мой код в SQL Server 2016
insert into @entdef_queries(entitydefid,squery)
select A.entitydefid
,
(
select String_agg(cols,ioperator)
from
(
Select case when lower(b.metricdatatype) like 'string%' or lower(b.metricdatatype) like '%char%' or lower(b.metricdatatype) ='bit' or lower(b.metricdatatype) like 'date%' then
' lower("'+ b.metricname +'") ' + b.metriccondition +' '''+ b.value1 +''' '
when lower(b.metricdatatype) not like 'string%' and lower(b.metricdatatype) like '%char%' and lower(b.metricdatatype) !='bit' and lower(b.metricdatatype) not like 'date%' then
case when lower(b.metriccondition)='between' then ' "'+ b.metricname +'"' + b.metriccondition +' '+ b.value1 +' and ' + b.value2 + ' '
else ' "'+ b.metricname +'"' + b.metriccondition +' '+ b.value1 + ' ' end
end cols
, ( select distinct operators from @entdef_data C where A.entitydefid=C.entitydefid) ioperator
from
@entdef_data B
where A.entitydefid=b.entitydefid
)inp
)
from
@entdef_data A
group by A.entitydefid;
Когда я пытаюсь выполнить следующий код.. он выдает ошибку String_agg
не является встроенной функцией.
1 ответ
Как отметил Гордон Линофф, эта функция недоступна в SQL Server 2016.
for xml
подход должен быть использован.
Существует несколько более быстрая альтернатива, которую можно использовать, начиная с SQL Server 2005: SQLCLR GROUP_CONCAT
, Использование очень похоже на родной STRING_AGG. Но поскольку это настраиваемая агрегация CLR, она сопряжена с собственными рисками: включение CLR, возможные утечки памяти и т. Д.
Документация: https://orlando-colamatteo.github.io/ms-sql-server-group-concat-sqlclr/