如何在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', ',')