我传递的是单个字符串列表参数(没有其他选项,必须是一列)。我已经读到TVP上无法保证订单,但我读过的所有文章都是指一个选择声明。如果我在TVP上运行光标,它是否总是从第一个记录读到最后一个?
答案 0 :(得分:1)
表值参数是一个表,一个临时表。
任何表,包括SQL Server中的临时表都是一组无序的行。
写作时
SELECT Column1 FROM Table1
服务器可以按其选择的任何顺序返回行。它将返回表格的所有行,当然,您无法预测以何种顺序。
如果您需要某些特定订单,则必须指定ORDER BY
子句,如下所示:
SELECT Column1 FROM Table1 ORDER BY Column2
这一切都适用于TVP和游标。
如果您定义一个没有ORDER BY
的游标,它将读取所有行,但是会以某种未指定的顺序读取,这可能因每次运行而异。如果需要游标以某种特定顺序处理TVP行,则在游标定义的ORDER BY
语句中指定SELECT
子句。
换句话说,光标将始终从"第一个"记录到"最后"。如果光标的逻辑很重要,那就是定义了什么是"第一个"什么是"最后"您需要添加ORDER BY
子句。