declare @top int
set @top = 5
select top @top * from tablename
È possibile?Usa variabile con TOP nell'istruzione select in SQL Server senza renderlo dinamico
O qualsiasi idea per una tale logica (non voglio usare la query dinamica)?
declare @top int
set @top = 5
select top @top * from tablename
È possibile?Usa variabile con TOP nell'istruzione select in SQL Server senza renderlo dinamico
O qualsiasi idea per una tale logica (non voglio usare la query dinamica)?
Sì, in SQL Server 2005 è possibile utilizzare una variabile nella clausola top
.
select top (@top) * from tablename
SQL Server 2005 ci consente in realtà di parametrizzare la clausola TOP, utilizzando una variabile, un'espressione o un'istruzione. Così si può 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
Nel 2005 e in seguito, è possibile farlo in quanto vi sono diverse risposte in questa discussione.
Che cosa è meno noto è che è possibile ottenere questo anche in 2k, utilizzando 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 si dimentica il SET ROWCOUNT 0 alla fine, il limite persiste .. e si finirà con molto difficile da individuare bug :-)
Si noti inoltre che SET ROWCOUNT non influenza il piano di esecuzione, quindi l'utilizzo di TOP è preferibile in SQL 2005. – Guffa
Grazie per la risposta alternativa – Paresh
+1 per la discussione su 'SET ROWCOUNT'. Questa non è la soluzione che ho usato, ma mi piace che tu l'abbia inventata – Sam
Grazie per il vostro sforzo, davvero aiutato per me!!! – Paresh
è completamente strano ... non ero a conoscenza di questo e sono rimasto bloccato per alcuni minuti su questo. Grazie (+1) – Christos