TOP が有効になったかどうかを示すキーワードまたはメタ情報が SQL Server にありますか?
EX:
Select TOP 5 * From Stuff
RESULT: 5 rows
6 つ以上あったかどうかを判断する最善の方法は何ですか?
I could do:
SELECT TOP 6 count(*) FROM Stuff
しかし、実際のクエリはこれよりもはるかに複雑で、大きなテーブル上にあるため、カウントを取得するための別の呼び出しが心配です。
ありがとう!
TOP が有効になったかどうかを示すキーワードまたはメタ情報が SQL Server にありますか?
EX:
Select TOP 5 * From Stuff
RESULT: 5 rows
6 つ以上あったかどうかを判断する最善の方法は何ですか?
I could do:
SELECT TOP 6 count(*) FROM Stuff
しかし、実際のクエリはこれよりもはるかに複雑で、大きなテーブル上にあるため、カウントを取得するための別の呼び出しが心配です。
ありがとう!
あなたが使用できる自動のものは何もありません。これらの線に沿って何かを使用できます
DECLARE @N INT = 5;
WITH T
AS (SELECT TOP (@N + 1) *
FROM master..spt_values
ORDER BY number)
SELECT TOP (@N) *,
CASE
WHEN Count(*) OVER () = (@N + 1) THEN 1
ELSE 0
END AS MoreRecords
FROM T
ORDER BY number
上位の N+1 (この例では N は 5 であるため、この例では上位 6 を選択) を選択し、クライアント コードの最後の要素を破棄し、6 番目の要素の存在を使用して TOP かどうかを判断できます。そもそも N を使用していれば効果があったでしょう。ただし、これを行う価値があるかどうかはわかりません。
同じロジックを持つサブクエリの COUNT(*) が 5 より大きい値を返す場合は true を返し、5 以下の値を返す場合は false を返すブール値をクエリに追加できます。
これにより、返されるデータに必要な情報が追加されます。パフォーマンスが心配で、クエリが非常に複雑な場合は、個別のクエリに比べて大幅な改善は得られないかもしれませんが、せいぜいわずかな改善しか得られないはずです。
2 つのクエリを実行するか、パフォーマンスを低下させる再評価を行わずにそれを行う方法はありません...
Select TOP 5 * From Stuff
と
Select Count(*) From Stuff
SELECT TOP 5 Field1, field2, recordcount
FROM Stuff
CROSS JOIN (SELECT COUNT(*) as recordcount FROM Stuff) a
ORDER BY Field1
select top 5 *,
case when count(*) OVER() <= 5 then 'yes' else 'no' end as AllRecordsReturned
from supportContacts