Из строки в таблицу. Функция split

Для SQL Server 2016 и выше используйте функцию string_split. 

select * from STRING_SPLIT('123,434,245,1231,132', ',') 

Для SQL Server ниже 2016 используйте свою функцию: 

ALTER FUNCTION [dbo].[split] ( @stringToSplit NVARCHAR(MAX), @char NVarCHAR)
RETURNS
 @returnList TABLE ([value] [nvarchar] (max), num int)
AS
BEGIN

Declare  @r1 TABLE ([value] [nvarchar] (max), num int)

 DECLARE @name NVARCHAR(max)
 DECLARE @pos INT
 declare  @index int = 1

 WHILE CHARINDEX(@char, @stringToSplit) > 0
 BEGIN
  SELECT @pos  = CHARINDEX(@char, @stringToSplit)  
  SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)

  INSERT INTO @r1 
  SELECT @name, @index

  set @index = @index  + 1

  SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
 END

 INSERT INTO @r1
 SELECT @stringToSplit, @index


 insert into @returnList 
 select [Value], num from  @r1 order by num

 RETURN
END

Примечание: 

На больших строках string_split работает гораздо лучше. 

declare @s nvarchar(max)='', @i int =0
while (@i<30000) begin  
	set @s = @s+ cast(@i as nvarchar) + ','
	set @i = @i +1 
end

select @s
select * from STRING_SPLIT(@s, ',')   -- 3 сек
select @s
select * from dbo.split(@s, ',')  -- 6 sec

Насколько полезной была статья?

Что еще посмотреть по SQL Server

Выгода от использования Falcon Space

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
Сайт использует Cookie. Правила конфиденциальности OK