SQL Serverの動的SELECT TOP @var


308

SQL Serverで返す行の量を動的変数で設定するにはどうすればよいですか?以下は、SQL Server 2005以降の構文では無効です。

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable

2
SQL 2005または2008を実行していますか?
ブライアンキム

SQL Server 2005を現在実行中
eddiegroves 2008年

回答:


561
SELECT TOP (@count) * FROM SomeTable

これはSQL 2005以降でのみ機能します


52
括弧も忘れてしまいます。
John Sheehan

14
これは素晴らしい!この間ずっと、動的SQLを使用する必要があると思いました。
ラグナ

1
かっこを追加しないことにより、クエリの愚かな間違いを理解するために他に誰がいますか?
ラガフ

あなたは私の日を救った!私はこれだけをすべて動的クエリに移動することを考えました!
Altaf Patel

41

「select top(@var)...」という構文は、SQL SERVER 2005+でのみ機能します。SQL 2000の場合、次のことができます。

set rowcount @top

select * from sometable

set rowcount 0 

お役に立てれば

オイシン。

(@@ rowcountをrowcountで置き換えるように編集されました-augustlightsに感謝します)


1
複数列の主キーがある場合、@@ RowCountで誤った行番号が取得される可能性があると聞きました。本当?
Brian Kim


4

動的SQLを使用して、execコマンドで実行することもできます。

declare @sql  nvarchar(200), @count int
set @count = 10
set @sql = N'select top ' + cast(@count as nvarchar(4)) + ' * from table'
exec (@sql)

8
しかし、の(非常に)警戒するSQLインジェクション攻撃このアプローチの
MadSkunk


4
declare @rows int = 10

select top (@rows) *
from Employees
order by 1 desc -- optional to get the last records using the first column of the table
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.