如何在不进行简单迭代的情况下编写 SQL 代码以插入(或更新)一个值数组(可能带有一个伴随的字段名数组,或者带有它们的矩阵)?
Lance Roberts
问问题
18460 次
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 回答