declare @top int
set @top = 5
select top @top * from tablename
出来ますか?
または、そのようなロジックのアイデア(動的クエリを使用したくない)?
はい。SQLServer 2005では、top
句で変数を使用できます。
select top (@top) * from tablename
SQL Server 2005では、変数、式、またはステートメントを使用して、実際にTOP句をパラメーター化できます。そのため、次のようなことができます。
SELECT TOP (@foo) a FROM table ORDER BY a
SELECT TOP (SELECT COUNT(*) FROM somewhere else) a FROM table ORDER BY a
SELECT TOP (@foo + 5 * 4 / 2) a FROM table ORDER BY a
2005年以降、このスレッドにはいくつかの返信があるので、それを行うことができます。
あまり知られていないのは、SET ROWCOUNTを使用して2kでもこれを実現できることです。
-- Works in all versions
SELECT TOP 10
-- Does not work on 2000
SELECT TOP (10)
SELECT TOP (@rows)
-- Works in both 2ooo and 2oo5
SET ROWCOUNT @max
SELECT *
FROM ...
SET ROWCOUNT 0
最後にSET ROWCOUNT 0を忘れると、制限が持続します。バグを見つけるのは非常に困難になります:-)