-1

最近、ローカル データベースを縮小し、サイズを 6 GB から 1 MB に縮小しました。

しかし、その後、一部のクエリが機能しません。それらは、開発サーバーとライブ サーバーで既に機能しています (ローカルでは、開発サーバーとライブ SQL バージョンは同じです)。

このクエリの1つは

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 

このクエリでエラーが発生しました:

ステートメントに UNION、INTERSECT、または EXCEPT 演算子が含まれている場合は、ORDER BY 項目を選択リストに含める必要があります。

上記のクエリは、開発サーバーとライブサーバーでうまく動作しますが、なぜローカルで実行できないのでしょうか??

問題が解決されるよりも intPriority に order by を変更したとしますが、解決策ではありません。ウェブサイト全体を変更する必要があります。

4

1 に答える 1

2

私はあなたが必要だと思います:

ORDER BY intPriority

また、これはデータベースの圧縮とはまったく関係がないと思いますが、おそらく SQL Server 2000 からアップグレードしたのでしょうか? その場合は、compat レベルを 2000 にロールバックすることで、その間に「やり遂げる」ことができます。

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;

次の場合に失敗します。

ステートメントに UNION、INTERSECT、または EXCEPT 演算子が含まれている場合は、ORDER BY 項目を選択リストに含める必要があります。

しかし、設定後に機能します:

ALTER DATABASE my_db SET COMPATIBILITY_LEVEL = 80;

したがって、データベースの互換性レベルを 2000 に戻すことができ、その間は無効なコードが機能しますが、実際には修正する必要があります。最終的に 80 は有効な互換性レベルではなくなるためです (SQL では無効になります)。 Server 2012)、およびこれが既に機能しているサーバーの互換性レベルを他の誰かがアップグレードする可能性があるためです (これは通常、データベースのアップグレード後に推奨される手順の 1 つであるため)。

于 2012-07-17T14:58:42.723 に答える