如何在SQL Server 2005中插入值数组?

时间:2008-10-03 16:12:30

标签: sql sql-server sql-server-2005 bulkinsert

如何将SQL代码写入INSERT(或更新)一个值数组(可能是一个伴随的字段数组,或者带有两者的矩阵),而不需要简单的迭代?

4 个答案:

答案 0 :(得分:12)

我将列表构造为xml字符串并将其传递给存储过程。在SQL 2005中,它增强了xml功能以解析xml并进行批量插入。

查看这篇文章: Passing lists to SQL Server 2005 with XML Parameters

答案 1 :(得分:2)

将值连接到列表并将其传递给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', ',')

答案 2 :(得分:1)

我知道您正在讨论编写存储过程以接受值数组

使用SQL Server 2005,您需要使用XML变量

SQL 2008将对表变量的支持添加为参数

在这里,您可以找到将表作为XMLtable variable传递给存储过程的好例子(SQL Server 2008)

答案 3 :(得分:1)

如果您的数据已在数据库中,则可以使用INSERT SELECT语法。它与INSERT VALUES略有不同......

INSERT recipient_table (field1, field2)
SELECT field1_from, field2_from
FROM donor_table
WHERE field1_from = 'condition'