2017-02-15 37 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

这不能解决我的问题,并不是我一直在寻找的,谢谢你尝试 –

相关问题