临时表上的主键会混淆结果

时间:2013-07-30 12:09:17

标签: sql-server tsql

这是“为什么会发生这种情况? - 问题”

我有以下脚本:

DECLARE @sql_stmt nvarchar(max)

SET @sql_stmt = '
   select top 100000 id as id
   from  dat.sev_sales_event
   order by id
'

DECLARE @preResult TABLE ( sales_event_id INT NOT NULL PRIMARY KEY)

INSERT INTO @preResult(sales_event_id)
EXEC sp_executesql @sql_stmt

SELECT * FROM @preResult

如果我运行此脚本,每次执行时结果可能会有所不同

只需从临时表中删除“PRIMARY KEY”,结果就会保持稳定

有人可以告诉我这种行为的理论吗?

亲切的问候 尔根

2 个答案:

答案 0 :(得分:4)

数据库中的数据顺序没有意义。

如果您希望订购结果,则必须指定ORDER BY条款。

这与主要密钥无关。

以下脚本很好地说明了这个问题

答案 1 :(得分:0)

您确定结果集是不同的还是只是以不同的顺序?

向临时表添加主键应该导致表的内容按数字顺序排序,因此显示为“稳定”。删除它将删除固有的顺序。