如何将SQL代码写入INSERT(或更新)一个值数组(可能是一个伴随的字段数组,或者带有两者的矩阵),而不需要简单的迭代?
答案 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将对表变量的支持添加为参数
在这里,您可以找到将表作为XML和table 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'