2017-02-15 1 views
0

Я пытаюсь создать хранимую процедуру, которая получает строку со значениями определенного столбца, который я хочу, а затем вставлять по одной строке на каждое значение, разделенное от "," .Как сделать INSERT в SQL Server из строки, содержащей определенный столбец

Например:

--The string I mentioned 
    @Objectid = '15, 21, 23, 53'. 
    --Then I wish to insert those values into a table like for instance 
    #Result(ID bigint, AppID bigint, ObjectID bigint) 

Так что желает, чтобы выполнить вставку на этом столе, и поместите значение каждого @Objectid на другую строку #RESULT и на колонки ObjectID, в то время как то же время, заполняя другие столбцы значениями , которые я сохранил в переменных в одной хранимой процедуре. Есть ли способ сделать это? И если это так, есть ли способ сделать это без использования курсора?

+2

использовать таблицу значных параметров и раскол в коде, прежде чем перейти к срабатывать –

+1

Есть пути в SQL разделить строку (например, при delimeted запятой) - посмотреть на [существующий Q & A] (http://stackoverflow.com/search?q=%23sql-server+split+a+string). Однако было бы намного лучше, если бы вы могли разделить свой идентификатор заранее. Вам не понадобится 'CURSOR', но, вероятно, потребуется использовать цикл WHILE' для выполнения инструкции' INSERT' несколько раз. Какова ваша исходная система (например, как вы получаете список идентификаторов)? – Serge

+1

Какая версия SQL Server? В 2016 году есть функция STRING_SPLIT, которую вы можете использовать. – Kostis

ответ

0
DECLARE @Objectid varchar(max); 
set @Objectid = '15, 21, 23, 53'; 
set @Objectid = Replace(@Objectid, ',', '.'); 

SELECT ParseName(@Objectid, 4) As ID , 
     ParseName(@Objectid, 3) As AppID , 
     ParseName(@Objectid, 2) As ObjectID, 
     ParseName(@Objectid, 1) As ObjectID2 
+0

запросите использование, как указано выше, экзамен –

+2

Обратите внимание, что это злоупотребление функцией PARSENAME, и оно также не расширяется до более чем 4 элементов, поэтому это не является общим решением проблемы. –

+0

Это не решает мою проблему и не то, что я искал вообще, спасибо за попытку, тем не менее, –

Смежные вопросы