Pull to refresh

Comments 6

Не хотел бы я попасть в руки к стоматологу, который в свободное время пишет под SQL Server.
Я для таких целей пользуюсь SQL#
Тогда объединение в строку будет выглядеть например так:
SELECT SQL#.String_Join('SELECT [Char] FROM dbo.Chars', ', ',1) 
еще не рассмотрен вариант с clr
На очень больших данных он будет чуть ли не самым быстрым
create table #t(s varchar(12))
insert into #t values('12')
insert into #t values('24')
insert into #t values('36')
insert into #t values('48')
insert into #t values('60')

;with
t1 as 
 (select s, row_number() over(order by s) rn
 from #t
 ),
t2 as
 (
  select CAST(s as varchar(max)) [s], 2 [rn] from t1 where t1.rn = 1
  union all
  select t2.s + ',' + t1.s, t2.rn + 1
  from t1  join t2 on t1.rn = t2.rn
 )
select s from t2
where rn = (select MAX(rn) from t2)

Работает довольно быстро, хотя я не сравнивал с Вашими методами

Ограничение в 100 рекурсий

The maximum recursion 100 has been exhausted before statement completion.

Вероятно у вас больше 100 значений. Допишите в конец снятие ограничение рекурсии:
option (maxrecursion 0)

Sign up to leave a comment.

Articles