如何在 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(更新或插入)

如何使用单引号 sql server 2005 插入文本

SQL Server 2005 中的逗号分隔值插入

如何将 Excel 工作表中的行插入 SQL Server 2005 或 oracle

仅使用 SQL 将图片插入 SQL Server 2005 图像字段

Sql Server 2005 - 插入更新触发器 - 获取更新,插入行