2017-02-15 40 views
0

我試圖創建一個存儲過程,該列表接收具有特定列的值的字符串,然後爲每個值插入一行按「,」。如何從包含特定列的字符串中執行SQL Server中的INSERT

例如:

--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

傳遞給PROC –

+1

有在SQL的方式分裂出一個字符串之前使用在代碼表值參數和分割(例如,當由逗號delimeted) - 看看[現有Q&A]( http://stackoverflow.com/search?q=%23sql-server+split+a+string)。但是,如果您事先能夠分配您的ID,情況會好得多。您不需要'CURSOR',但可能需要使用'WHILE'循環多次執行'INSERT'語句。你的源系統是什麼(即你如何得到Id的列表)? – 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

這不能解決我的問題,並不是我一直在尋找的,謝謝你嘗試 –

相關問題