【问题标题】:Table valued parameters - order of records to stored procedure表值参数 - 存储过程的记录顺序
【发布时间】:2013-10-24 22:41:53
【问题描述】:

我有一个接受表值参数的存储过程。

我正在从我的 C# DAL 传递一个数据表。调用存储过程时,TVP 是否保证保留行的顺序。我的猜测是它应该是(在这种情况下,这是一个愚蠢的问题)。但我只是想确定一下。

谢谢

维卡斯

【问题讨论】:

  • 您希望调用者 确定订单还是打算要求 订单?如果是后者,那么您可以在存储过程中订购 TVP。为什么顺序很重要?
  • 让我澄清一下;在 C# 代码和 TVP 的 sproc 之间已经有一个接口,允许发送记录列表。在特定情况下,我只需要发送 2 条记录(截至目前只有 2 条;进一步可能会更多),但需要注意的是应该按顺序保存 2 条记录。我想重用这个接口 - 因此要确保在使用 TVP 调用 sproc 时订单不会被打乱。
  • 您的 TVP 中不能只有两列,其中一列是您的序列吗?

标签: c# sql-server-2008 table-valued-parameters


【解决方案1】:

应保留订单。

来自MSDN

表值参数提供更大的灵活性,在某些情况下 比临时表或其他传递列表的方式更好的性能 的参数。表值参数具有以下优点:

  • 不要从客户端获取初始数据填充的锁。
  • 提供简单的编程模型。
  • 使您能够在单个例程中包含复杂的业务逻辑。
  • 减少到服务器的往返次数。
  • 可以有不同基数的表结构。
  • 是强类型的。
  • 允许客户端指定排序顺序和唯一键。

【讨论】:

  • 酷,我会检查一下。看起来这正是我需要的。谢谢。 :)
  • 我阅读了文档以说明 client 指定了排序顺序,因此服务器不会更改它。
  • 我不确定“允许客户端指定排序顺序”是否意味着它保留了值的顺序。也许这只是意味着您可以指定它,f.e.通过向类型添加排序列,提供它并按该列排序。其实我也需要知道订单是否有保证。
猜你喜欢
  • 1970-01-01
  • 2010-10-31
  • 2022-10-21
  • 2012-09-23
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
相关资源
最近更新 更多