Вставка вставляет три строки, по одной для каждого значения. Если вы хотите объединить их в столбцы, вам нужно повернуть их или (как я предпочитаю) использовать агрегацию.
У вас также есть таблица с четырьмя столбцами, но, кажется, вставляются только три, поэтому я подозреваю, что вы хотите:
create table #Organization (
organizationId int identity(1, 1) primary key,
provinceId int,
CityId int,
TownId int
);
(я не вижу необходимости в bigint
для этого примера.)
Очевидно, самое простое решение - не использовать строки:
Insert Into #Organization (provinceId, CityId, TownId)
values (1, 2, 3);
Но если вы используете строки, вы можете попробовать:
Insert Into #Organization (provinceId, CityId, TownId)
select provinceId, CityId, TownId
from (values('1,2,3')) v(str) cross apply
(select max(case when seqnum = 1 then p.value end) as provinceid,
max(case when seqnum = 2 then p.value end) as cityid,
max(case when seqnum = 3 then p.value end) as townid
from (select p.*,
row_number() over (order by charindex(',' + p.value + ',', ',' + v.str + ',')) as seqnum
from string_split(v.str, ',') p
) p
) s;
Обратите внимание, что существует проблема с использованием string_split()
для этой цели, потому что он не "запоминает" положение подстроки в исходной строке. Это пытается обойти эту проблему с помощью charindex()
. В вашем случае это будет работать, потому что все значения являются числами.
Здесь - это дБ <> скрипка.