6

selectステートメントを実行します。結果セットの行数が特定の数以下の場合、選択した行を返します。行数が特定の数より多い場合、行を返さないようにします。

選択を実行して比較を行った後、行数が許可されている行数よりも多い場合は、次のコマンドを実行します。

SELECT TOP 0 NULL AS ID

私が発見したのは、最初に選択された両方のレコードが、IDと呼ばれる単一の列を持ち、レコードがない2番目の結果セットとともに返されることでした。明らかに、最初のselectステートメントはまだ返されているので、これを避けたいと思います。方法はありますか?

編集:許可されているよりも多くの行があったかどうかを示すステータス値を返す必要があることを追加するのを忘れました。これは、カウントを取得する必要があり、同じクエリを2回実行することなくカウントを取得したいことを意味します。したがって、許可される最大行数が25であるが、実際には0行が存在する場合、ステータスは0を返します。ただし、行数が25を超える場合は、行を返しませんが、ステータスを-に設定します。 1.1。

4

3 に答える 3

5

一時テーブルへの選択を行い、テーブル内の行数を確認し、選択で一時テーブルを使用するか、0 行を返します。

-- Your query goes here
select ID
into #T
from YourTable
--where 

-- Check the number of rows returned
if (select count(*) from #T) <= 10
begin
  -- Return the data
  select ID
  from #T
end
else
begin
  -- Don't return anything
  select ID
  from #T
  where 0 = 1
end

drop table #T

を使用して 1 つのクエリで実行することもできますcount(*) over()

select ID
from
  (
    select ID, count(*) over() as C
    from YourTable
    --where
  ) T
where C <= 10

またはCTEで

with C as
(
  select ID
  from YourTable
  --where
)
select ID
from C
where (select count(*) from C) <= 10

ニーズに最適なもの、またはデータで最高のパフォーマンスを発揮するものを選択してください。

Update
行数を返す、変更された一時テーブル バージョン。

declare @MaxRows int
set @MaxRows = 25

declare @ActualRowCount int

select top(@MaxRows+1) ID
into #T
from YourTable

set @ActualRowCount = @@rowcount

if @ActualRowCount = 0
begin
  -- No rows returned
  select null as ID, 0 as [RowCount]
end
else
if @ActualRowCount > @MaxRows
begin
  -- Too many rows returned
  select null as ID, -1 as [RowCount]
end
else
begin
  -- Return rows from temp table
  select ID, @ActualRowCount as [RowCount]
  from #T
end

drop table #T
于 2012-05-20T11:27:59.817 に答える
1

SQL Server を使用していると仮定して、@@ROWCOUNT(最後のステートメントの影響を受けた行数を返します。)

ここに例があります:

SELECT ID FROM [YourTable] WHERE [Your Conditions]

IF @@ROWCOUNT > [YourLimit]
  SELECT ID FROM [YourTable] WHERE 0=1 // return empty records
ELSE
  SELECT ID FROM [YourTable] WHERE [Your Conditions]

それで全部です

于 2012-05-20T15:00:42.330 に答える
1

行数パラメーターを変数にロードしてから、次のようにしますSELECT

DECLARE @rows INT;
DECLARE @maxRows INT = 1000; --set your desired max value here
SELECT @rows=COUNT(1) FROM [myTable];

SELECT ID FROM [myTable]
WHERE @rows <= @maxRows;

行が多すぎる場合は空のセットを取得するか、結果セットを取得します

于 2012-05-20T16:00:26.390 に答える