2

クエリを実行せずにsp_executesqlを使用してクエリが返す結果の数をカウントすることは可能ですか?私が意味したのは:

文字列でSQLクエリを取得するプロシージャがあります。例:

SELECT KolumnaA FROM Users WHERE KolumnaA > 5

このクエリが返す結果の数を割り当てて変数に格納したいのですが、実際にクエリを実行したくありません。

私はこの解決策を使用できません:

EXECUTE sp_executesql @sql          
SET @allCount = @@rowcount

返された行の数を取得することに加えて、クエリ結果を返すためです。

4

6 に答える 6

5

どういうわけか、このような上記のクエリから別のクエリを生成できますか

SELECT count(*)FROM Uzytkownicy WHERE KolumnaA> 5

そしてそれを実行しますか?

于 2012-05-04T17:32:14.850 に答える
3

一般的な場合...

SELECT COUNT(*) FROM ( <your query> )

...あなたの場合、これは次のように簡略化できます。

SELECT COUNT(*) FROM Users WHERE KolumnaA > 5

これを安くすることができない理由は、DBMSによって管理されるデータ内に隠された「カウンター」がないためです。DBMSは、テーブル内の行の総数さえ知りません。ましてや、事前に知られていない基準(などKolumnaA > 5)を満たす行の数も知りません。

したがって、カウントには実際にデータを見つける必要があるため、「実際の」クエリが必要です。幸い、これはすべてサーバー上で行われ、わずかな量のデータ(カウント自体)のみがクライアントに転送されるため、データが適切にインデックス付けされていると仮定すると、かなり高速になるはずです。

ただし、一貫性に注意してください。カウントクエリが特定のカウントを返したからといって、「実際の」クエリが同じ数の行を返すことを意味するわけではありません(複数のクライアントが同時にデータを変更する可能性がある環境で)。

于 2012-05-04T17:44:37.843 に答える
2

使用する:

SELECT COUNT(1) FROM Uzytkownicy WHERE KolumnaA > 5

はい、クエリを実行します。ただし、行数以外の結果は返されません。

そうでなければ、結果を返さないようにする方法がわかりません。

于 2012-05-04T17:32:39.940 に答える
2

質問には2つの部分があると思いますが、これについて説明します。

質問の最初の部分は、クエリ結果の代わりに行数を返す方法です。これは、Count(item)を使用して行われます。Count(KolumnaA)の代わりにCount(1)を使用すると、特定の列を取得する代わりに、返される行の数をカウントするだけなので、わずかに高速になります。

SELECT Count(1) FROM Users WHERE KolumnaA > 5

2番目の部分は、これを変数に割り当てることです。sp_executesqlを使用する必要がある場合は、次のように実行できます。

Declare @sql varchar(4000)
Declare @allCount int
Set @sql = 'SELECT 1 FROM Users WHERE KolumnaA > 5'
sp_executesql(@sql)
SET @allCount = @@rowcount 

または、sp_executesql出力機能の使用を試みることもできます。

DECLARE @allCount int

EXEC sp_executesql
   N'@allCount = SELECT Count(1) FROM Users WHERE KolumnaA > 5',
   '@allCount int OUTPUT',
   @allCount OUTPUT 
于 2012-05-04T17:42:27.820 に答える
1

クエリを実行しますが、実際の結果ではなくカウントのみを返します。

SELECT count(*) FROM Uzytkownicy WHERE KolumnaA > 5
于 2012-05-04T17:41:58.427 に答える
1

これが私が見つけた結果です:

sp_executesql内の行数の取得

基本的に、クエリを次のように書き直します。

DECLARE @SQL NVARCHAR(1000)
DECLARE @Count INT
SET @SQL = 'SELECT KolumnaA FROM Users WHERE KolumnaA > 5; SELECT @Count = @@ROWCOUNT;'
DECLARE @Params NVARCHAR(100)
SET @Params = '@Count INT OUTPUT'

EXEC sp_executesql @SQL, @Params, @Count = @Count OUTPUT
PRINT @Count  --should return the number of rows

乾杯。

于 2015-11-16T20:13:17.517 に答える