Из строки в таблицу. Функция 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
SQL. Безопасная разработка на MS SQL (try catch)
SQL. Быстрый поиск хранимых процедур и таблиц в ManagementStudio
SQL. Безопасное приведение типов
SQL. Создание структуры БД через диаграммы
Как оптимизировать массовые операции Update/delete
Нюанс с долгим анализом сложных хранимок
Разработчик SQL, нужны клиенты и заказы?
Прямые заказы от клиентов. Нужно знать только SQL и HTML
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта