2

如何在不进行简单迭代的情况下编写 SQL 代码以插入(或更新)一个值数组(可能带有一个伴随的字段名数组,或者带有它们的矩阵)?

4

4 回答 4

12

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

查看这篇文章: 使用 XML 参数将列表传递给 SQL Server 2005

于 2008-10-03T16:16:21.197 回答
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', ',')
于 2008-10-12T21:16:33.850 回答
1

我了解您正在谈论编写存储过程以接受值数组

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

SQL 2008 增加了对表变量作为参数的支持

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

于 2008-10-03T16:17:06.547 回答
1

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

INSERT recipient_table (field1, field2)
SELECT field1_from, field2_from
FROM donor_table
WHERE field1_from = 'condition'
于 2008-10-03T16:26:27.727 回答