2011-12-26 27 views
5

SQL Server'da garip bir hatayla karşılaşıyorum ve bunun bir açıklaması istiyorum.Alt sorgudaki SQL Server ORDER BY yan tümcesi

I, örneğin

SELECT a FROM (SELECT * FROM A ORDER BY a) T 

aşağıdaki hata

madde İLE SİPARİŞ görünüm, satır içi fonksiyonlarında geçersiz

atar, bir alt sorgu ORDER BY yazarken tablolar, alt sorgular, türetilmiş ve TOPLAM XML belirtilmemişse ve ortak tablo ifadeleri belirtilir.

Ama alt sorguda TOP kullandığınızda normalde Yani

SELECT a 
FROM 
    (SELECT TOP 1000000 * FROM A ORDER BY a) T 

çalışır, ben bu durumda yerine

SELECT a FROM (SELECT * FROM A ORDER BY a) T 

olarak, A üst satır sayısı seçmek anlamına gelmez . hatanın sebebi nedir?

+1

Görünümler, türetilmiş tablolar, satır içi işlevler ve alt sorgularda SQL 2000'de ORDER BY deyiminin davranışı http://support.microsoft.com/kb/841845/en-us –

cevap

4

alt sorgu sıralamak ve ondan o seçkin bir şeyden sonra fazla bir anlamı yoktur - üst düzey sıralanır seçme garanti edilmez, bu nedenle - iç sorgu sipariş hiçbir anlamı yoktur

Ama İç sorguyu TOP bildirimi ile sipariş ederseniz - üst düzey seçimin böyle bir şekilde sipariş edileceğini de garanti etmez, ancak iç sorgudan yalnızca en üst X satırı içerecektir - bu zaten mantıklıdır.