如何在 SQL Server 2005 中插入值数组?
Posted
技术标签:
【中文标题】如何在 SQL Server 2005 中插入值数组?【英文标题】:How to INSERT an array of values in SQL Server 2005? 【发布时间】:2008-10-03 16:12:30 【问题描述】:如何在不进行简单迭代的情况下编写 SQL 代码以插入(或更新)一个值数组(可能带有一个伴随的字段名数组,或带有它们的矩阵)?
【问题讨论】:
【参考方案1】:我将列表构造为 xml 字符串并将其传递给存储的过程。在 SQL 2005 中,它增强了 xml 功能来解析 xml 并进行批量插入。
查看这篇文章: Passing lists to SQL Server 2005 with XML Parameters
【讨论】:
是的,这绝对是最好的选择之一。我一直使用这种方法作为将值列表传递给存储过程的标准方法。【参考方案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', ',')
【讨论】:
【参考方案3】:如果您的数据已经在数据库中,您可以使用INSERT SELECT
语法。它与 INSERT VALUES one 略有不同...
INSERT recipient_table (field1, field2)
SELECT field1_from, field2_from
FROM donor_table
WHERE field1_from = 'condition'
【讨论】:
【参考方案4】:我了解到您正在谈论编写存储过程以接受值数组
对于 SQL Server 2005,您需要使用 XML 变量
SQL 2008 增加了对表变量作为参数的支持
在这里,您可以找到将表传递给存储过程的良好示例,例如 XML 和 table variable (SQL Server 2008)
【讨论】:
以上是关于如何在 SQL Server 2005 中插入值数组?的主要内容,如果未能解决你的问题,请参考以下文章
如何在SQL Server 2005中进行upsert(更新或插入)
如何将 Excel 工作表中的行插入 SQL Server 2005 或 oracle