gpt4 book ai didi

sql - 是否有一种优雅的交叉实现方式可以在没有专门解析的情况下保存多条记录?

转载 作者:行者123 更新时间:2023-12-04 23:44:28 25 4
gpt4 key购买 nike

我正在设想一些事情,例如获取对象集合并将其发送到存储过程,以便该集合映射到 TABLE 参数或其他内容。这样的东西存在吗?

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

最佳答案

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

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 EXAMPLE .

如果你问我,我建议使用 xml:
  • 您不仅可以将 xml 用于表格数据,还可以用于嵌套到
  • 您不必为要使用另一个架构的每个类型定义类型
  • 据我所知,一旦你创建了一个类型,你就不能改变它,如果有对象在使用它,你也不能删除它,所以维护起来不是很容易

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

    关于sql - 是否有一种优雅的交叉实现方式可以在没有专门解析的情况下保存多条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17996710/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com