1. ホーム
  2. sql

[解決済み] なぜSelect Top 100 Percentを使用するのですか?

2023-04-15 05:31:37

質問

私は SQL Server 2005 では、ビュー定義で order by を使用できるように SQL Server をトリックすることができました。 TOP 100 PERCENT を含めることで、ビューの定義で順序を使用できるようにすることができます。 SELECT 節に記述しています。しかし、私が受け継いだ他のコードでは SELECT TOP 100 PERCENT ... 動的SQL文の中で( ADO ASP.NET アプリなど)。これには何か理由があるのでしょうか?と同じ結果になるのではありませんか? ではなく を含む TOP 100 PERCENT ?

どのように解決するのですか?

"に使用されました。 中間実体化(Google検索) "です。

良い記事です。 アダム・マハニック:中間実体化の秘密を探る

彼はさらに MS Connect を立ち上げたので、よりクリーンな方法で行うことができます。

私の見解は "本質的に悪いものではない" ですが、100% 確実でない限り使わないでください。問題は、それを行う時点でのみ機能し、おそらくそれ以降は機能しないことです (パッチ レベル、スキーマ、インデックス、行数など)...。

動作確認済み例

これは、どの順番で評価されるのかが分からないため、失敗する可能性があります。

SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1 AND CAST(foo AS int) > 100

また、これも失敗する可能性があるのは

SELECT foo
FROM
    (SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1) bar
WHERE
    CAST(foo AS int) > 100

しかし、これはSQL Server 2000ではありませんでした。内部のクエリは評価され、スプールされます。

SELECT foo
FROM
    (SELECT TOP 100 PERCENT foo From MyTable WHERE ISNUMERIC (foo) = 1 ORDER BY foo) bar
WHERE
    CAST(foo AS int) > 100

注:これは SQL Server 2005 でも動作します。

SELECT TOP 2000000000 ... ORDER BY...