2012-07-17 56 views
-1

最近,我縮小了本地數據庫的大小,並將大小從6gb減小到了1mb。在縮小數據庫後order by子句不工作

但之後,一些查詢不起作用,那些已經在開發和現場服務器(在本地,發展和活的SQL版本是相同的)工作。

一個這個查詢的是

SELECT a.col1, 
     b.col2, 
     isnull(a.intPriority, 100) AS intPriority 
FROM tab1 a 
     INNER JOIN tab2 b 
     ON a.id = b.id 
UNION 
SELECT a.col1, 
     b.col2, 
     isnull(a.intPriority, 100) AS intPriority 
FROM tab1 a 
     INNER JOIN tab2 b 
     ON a.id = b.id 
ORDER BY a.intPriority 

該查詢給我一個錯誤:

ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.

上面的查詢運行良好的開發和實時服務器,爲什麼不能在本地?

我知道,假設我通過intPriority更改順序,問題將解決,但它不是解決方案。我必須改變我的整個網站。

+2

你爲什麼在這裏做工會?由於這兩個語句都是相同的,並且聯合會篩選出重複項,所以您要完成的任務就是使查詢速度變慢。 – HLGEM 2012-07-17 15:05:23

+1

你也可以告訴使用什麼數據庫版本在沒有工作的機器上運行,以及那些應該做的。 (我發現很難相信任何實際工作,因爲這是一個基本的語法錯誤。) – HLGEM 2012-07-17 15:08:46

+0

這是例子。在我的情況下,我在工會右側有另一個查詢。 – 2012-07-17 15:10:47

回答

2

我想你只需要:

ORDER BY intPriority 

此外,我不認爲這有什麼都做收縮數據庫,但也許你從SQL Server 2000升級呢?如果這樣你就可以「通過獲取」在此期間,通過滾動您的COMPAT水平回到2000年就證明,SQL Server 2008上:

SELECT name = COALESCE(a.name, '') FROM sys.objects AS a 
UNION ALL 
SELECT name = COALESCE(a.name, '') FROM sys.objects AS a 
ORDER BY a.name; 

與失敗:

ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.

但設置後工作:

ALTER DATABASE my_db SET COMPATIBILITY_LEVEL = 80; 

所以,你可以爲你的數據庫重新設置compat的水平到2000年,和你的無效代碼將在此期間的工作,但你真的應該修復它,因爲最終80將不會是一個有效的COMPA (它在SQL Server 2012中不再有效),並且因爲其他人可能會升級已在工作的服務器上的兼容級別(因爲這通常是recommended steps after upgrading a database之一)。

+2

我同意,我看不出有什麼辦法可以解決這個問題。在任何機器上。我知道的 – HLGEM 2012-07-17 15:05:57

+0

。但在收縮數據庫之前,我已經採取了數據庫備份和此查詢在此工作.. – 2012-07-17 15:06:20

+0

**不是**迴應您先前的評論!不是我的。你的演示代碼沒有證明它沒有'ORDER BY'的問題。這做'SELECT name作爲foo從sys.objects聯合SELECT名稱作爲foo從sys.objects ORDER BY thisIsNonsense.foo' – 2012-07-17 16:18:21