Select

按主鍵排序的平台無關選擇

  • February 25, 2014

是否有一種合理的標準方法可以在單個表上執行選擇並根據主鍵對結果集進行排序,而無需顯式指定主鍵條件?

理想情況下,我希望我可以執行如下查詢,無效查詢:

select * from my_table order as primary key;

如果您需要對結果集進行排序,SQL 標準要求您指定一個明確的列列表。

許多 RDBMS 以聚集索引順序返回單個表選擇的結果。由於預設情況下主鍵再次由聚集索引強制執行,因此您可以關閉。但是,不能保證此順序。可能導致引擎以不同順序返回行的事情是查詢中的並行性或與該表的其他並發互動。

有一種相當標準的方法來構造一個動態選擇,它指定了您想要的 order by 子句。您可以INFORMATION_SCHEMA為此目的使用管理視圖。然而,當涉及到實際執行動態 SQL 時,這種方法是不夠的,因為不同供應商之間存在顯著差異。

所以簡而言之,答案是:不。


有一個公認的小例外,您可以在不知道 SQL Server 中單個列代理主鍵的列名的情況下逃脫:

CREATE TABLE dbo.A(i INT IDENTITY(1,1) PRIMARY KEY CLUSTERED);
GO

SELECT * FROM dbo.A ORDER BY $IDENTITY;

關鍵字$IDENTITY總是引用表的一個標識列。但這是特定於 SQL Server 的。

引用自:https://dba.stackexchange.com/questions/53795