SQL Server 2005 - 将二维数组传递给存储过程

时间:2009-11-05 18:47:06

标签: sql-server sql-server-2005

我正在研究SQL Server 2005。

这里我需要传递一个数组(2维,例如:Emp No,Emp Name),它具有从我的ASP.NET应用程序到存储过程的多条记录。

如果有办法可以告诉我吗?

非常感谢,

问候。

Anusha。

5 个答案:

答案 0 :(得分:1)

概述了here

的6种不同方法

我个人喜欢Nestor概述的XML方法,因为它可以处理任何维度的数组,尽管其他人可能更喜欢fn_split,传递分隔字符串并将其解压缩到表变量中以便为简单情况加入。

所有问题都在SQL2008中得到解决 - 基于集合的语言最终允许表变量作为输入参数!

答案 1 :(得分:0)

这听起来大致相当于发送一个包含两列的表:

table Employees
.No
.Name

在SQL 2008中,您可以使用表类型参数来传递此类数据,但我不相信这在Sql 05中可用。

如果您使用的是.NET,则可以使用SqlBulkCopy类发送一批记录。

如果这些都不起作用,则可能必须每行执行一个存储过程(在这种情况下为每个员工)。这假设这个数据需要在表中结束,而不是试图解析或重新格式化SQL服务器上的数据。如果是后者,则应该在客户端而不是数据库服务器上执行此类操作。

答案 2 :(得分:0)

你可以创建一个临时表,让proc 1填充它,如果你使用2005,则proc 2从中选择。在2008年你可以传递表值参数。有些人可能会说你也可以传入XML。

答案 3 :(得分:0)

2005年,我认为没有办法优雅地做到这一点。在过去,我通过将值列表作为文本字符串传递来完成此操作,例如“1,2,3”。我们有一个用户定义的函数,它拆分列表并返回一个表。只需要注意列表的长度不会超过参数长度。

答案 4 :(得分:0)

以xml格式传递数组,如:

<array>
   <row>
      <cell>1</cell>
      <cell>2</cell>
      <cell>3</cell>
   </row>
   <row>
      <cell>4</cell>
      <cell>5</cell>
      <cell>6</cell>
   </row>
</array>

通过xml类型的参数。 SQL 2005具有xml操作运算符,您可以在存储过程中使用它来解析数组。