statement - sql server where




Usa variabile con TOP nell'istruzione select in SQL Server senza renderla dinamica (2)

In realtà, SQL Server 2005 ci consente di parametrizzare la clausola TOP, utilizzando una variabile, un'espressione o un'istruzione. Quindi puoi fare cose come:

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 

Source

Questa domanda ha già una risposta qui:

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

È possibile?

O qualche idea per una tale logica (non voglio usare la query dinamica)?


Nel 2005 e in seguito, puoi farlo perché ci sono diverse risposte in questa discussione.

Ciò che è meno noto è che puoi ottenere questo risultato anche in 2k, usando SET ROWCOUNT.

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

Nota, se dimentichi SET ROWCOUNT 0 alla fine, il limite persiste .. e finirai con molto difficile individuare bug :-)





tsql