如何在SQL Server 2005中插入值的数组?
时间:2020-03-06 15:05:03 来源:igfitidea点击:
如何在不进行简单迭代的情况下,将SQL代码编写为INSERT(或者UPDATE)值数组(可能带有伴随的字段名数组,或者同时带有它们的矩阵)的SQL代码?
解决方案
我将列表构造为xml字符串,并将其传递给存储的proc。在SQL 2005中,它具有增强的xml功能,可以解析xml并进行批量插入。
检查这篇文章:
使用XML参数将列表传递到SQL Server 2005
我了解我们正在谈论编写存储过程以接受值数组
使用SQL Server 2005,我们将需要使用XML变量
SQL 2008增加了对表变量作为参数的支持
在这里,我们可以找到将表作为XML和表变量传递到存储过程的良好示例(SQL Server 2008)
如果数据已经在数据库中,则可以使用" INSERT SELECT"语法。它与INSERT VALUES稍有不同...
INSERT recipient_table (field1, field2) SELECT field1_from, field2_from FROM donor_table WHERE field1_from = 'condition'
将值连接到列表并将其传递给sp的简单方法。
在sp中,使用dbo.Split udf将其转换回结果集(表)。
创建此功能:
CREATE FUNCTION dbo.Split(@String nvarchar(4000), @Delimiter char(1)) returns @Results TABLE (Items nvarchar(4000)) as begin declare @index int declare @slice nvarchar(4000) select @index = 1 if @String is null return while @index != 0 begin select @index = charindex(@Delimiter,@String) if @index !=0 select @slice = left(@String,@index - 1) else select @slice = @String insert into @Results(Items) values(@slice) select @String = right(@String,len(@String) - @index) if len(@String) = 0 break end return end
然后尝试:
select * from dbo.split('a,b,c,d,e,f,g,h,i,j,k,l', ',')