it-swarm.com.de

Verwenden Sie die Variable mit TOP in der SELECT-Anweisung in SQL Server, ohne sie zu dynamisieren

declare @top  int
set @top = 5
select top @top * from tablename

Ist es möglich?

Oder eine Idee für eine solche Logik (ich möchte keine dynamische Abfrage verwenden)?

200
Paresh

Ja, in SQL Server 2005 kann eine Variable in der top -Klausel verwendet werden.

select top (@top) * from tablename
370
Guffa

Mit SQL Server 2005 können wir die TOP-Klausel mithilfe einer Variablen, eines Ausdrucks oder einer Anweisung parametrisieren. So können Sie Dinge tun wie:

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 

Quelle

38
Espo

In 2005 und später können Sie dies tun, da es in diesem Thread mehrere Antworten gibt.

Weniger bekannt ist, dass Sie dies auch in 2k erreichen können, indem Sie SET ROWCOUNT verwenden.

  -- 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

Beachte, wenn du das SET ROWCOUNT 0 am Ende vergisst, bleibt das Limit bestehen .. und du wirst mit sehr schwer zu lokalisierenden Fehlern enden :-)

24
Brimstedt