4

我正在设想诸如获取对象集合并将其发送到存储过程的方式,即集合映射到 TABLE 参数或其他东西。这样的事情存在吗?

实施方面,我们使用 SQL Server 2008,但如果可能的话,我想坚持普遍支持的方法[阅读接近多个供应商兼容]。我意识到我可以做一些专门的解析,实际上我也不需要优化这个(即我一次只能保存一条记录),但我想知道是否有一种通用的最佳实践方法来保存多个通过存储过程记录?

4

1 回答 1

0

一般来说,我知道有两种方法,遗憾的是这两种方法都不是交叉实现的。

xml参数

create procedure sp_test1
(
    @Data xml
)
as
begin
  select
      D.r.value('@ID', 'nvarchar(128)') as ID,
      D.r.value('@Name', 'nvarchar(128)') as Name
  from @Data.nodes('Data/row') as D(r)
end;

declare @Data xml

select @Data = (select * from test for xml raw('row'), root('Data'))

exec dbo.sp_test1
    @Data = @Data;

表变量

create procedure sp_test2
(
    @tData tbl_test readonly
)
as
begin
  select * 
  from @tData
end

declare @tData tbl_test

insert into @tData
select * from test

exec dbo.sp_test2
    @tData = @tData;

请参阅SQL FIDDLE 示例

如果你问我,我建议使用 xml:

  • 您不仅可以将 xml 用于表格数据,还可以用于嵌套到
  • 您不必为要使用其他模式的每种类型都定义类型
  • 据我记得,一旦你创建了一个类型,你就不能改变它,如果有一个对象在使用它,你就不能删除 i,所以它不是很容易维护

我还必须警告您,根据我的经验,对于大量记录,xml 可能不会那么快。

于 2013-08-02T21:18:08.520 回答