在缩小数据库后order by子句不工作
最近,我缩小了本地数据库的大小,并将大小从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更改顺序,问题将解决,但它不是解决方案。我必须改变我的整个网站。
我想你只需要:
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之一)。
我同意,我看不出有什么办法可以解决这个问题。在任何机器上。我知道的 – HLGEM 2012-07-17 15:05:57
。但在收缩数据库之前,我已经采取了数据库备份和此查询在此工作.. – 2012-07-17 15:06:20
**不是**回应您先前的评论!不是我的。你的演示代码没有证明它没有'ORDER BY'的问题。这做'SELECT name作为foo从sys.objects联合SELECT名称作为foo从sys.objects ORDER BY thisIsNonsense.foo' – 2012-07-17 16:18:21
你为什么在这里做工会?由于这两个语句都是相同的,并且联合会筛选出重复项,所以您要完成的任务就是使查询速度变慢。 – HLGEM 2012-07-17 15:05:23
你也可以告诉使用什么数据库版本在没有工作的机器上运行,以及那些应该做的。 (我发现很难相信任何实际工作,因为这是一个基本的语法错误。) – HLGEM 2012-07-17 15:08:46
这是例子。在我的情况下,我在工会右侧有另一个查询。 – 2012-07-17 15:10:47