首页 > 解决方案 > 表值参数游标顺序

问题描述

我正在传递一个字符串列表参数(没有其他选项,必须是一列)。我读过 TVP 不能保证顺序,但我读过的所有文章都指的是 select 语句。如果我在 TVP 上运行光标,它是否总是从第一条记录读取到最后一条记录?

标签: sqlsql-servertsqltable-valued-parameters

解决方案


表值参数是一个表,一个临时表。

任何表,包括 SQL Server 中的临时表,都是一组无序的行。

当你写

SELECT Column1 FROM Table1

服务器可以按照它选择的任何顺序返回行。它将返回一个表的所有行,当然,您只是无法预测以哪种顺序。

如果您需要一些特定的顺序,那么您必须指定ORDER BY子句,如下所示:

SELECT Column1 FROM Table1 ORDER BY Column2

所有这些都适用于 TVP 和光标。

如果您定义一个没有 的游标ORDER BY,它将读取所有行,但以一些未指定的顺序读取,这可能因每次运行而异。如果您需要游标以某种特定顺序处理 TVP 行,则在游标定义ORDER BY的语句中指定子句。SELECT

换句话说,光标总是从“第一条”记录读取到“最后一条”。如果定义什么是“第一个”和什么是“最后一个”对游标的逻辑很重要,则需要添加ORDER BY子句。


推荐阅读