/ / Dynamic SELECT TOP @var V SQL Serveri - sql, sql-server-2005

Dynamický SELECT TOP @var V SQL Server - sql, sql-server-2005

Ako môžem mať dynamickú premennú nastavujúcu množstvo riadkov, ktoré sa majú vrátiť na server SQL Server? Nižšie nie je platná syntax v SQL Server 2005+:

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable

odpovede:

453 pre odpoveď № 1
SELECT TOP (@count) * FROM SomeTable

Toto bude fungovať len s SQL 2005+


37 pre odpoveď č. 2

Syntax "select top (@var) ..." funguje len v SQL SERVER 2005+. Pre SQL 2000 môžete urobiť:

set rowcount @top

select * from sometable

set rowcount 0

Dúfam, že to pomôže

Oisin.

(upravené na nahradenie @@ rowcount s rowcount - vďaka augustlights)


11 pre odpoveď č. 3

V príklade x0n by to malo byť:

SET ROWCOUNT @top

SELECT * from sometable

SET ROWCOUNT 0

http://msdn.microsoft.com/en-us/library/ms188774.aspx


3 pre odpoveď č. 4

Je tiež možné použiť dynamický SQL a spustiť ho príkazom exec:

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

2 pre odpoveď № 5

Alebo jednoducho umiestnite premennú do zátvoriek

DECLARE @top INT = 10;

SELECT TOP (@Top) *
FROM <table_name>;

1 pre odpoveď č. 6
declare @rows int = 10

select top (@rows) *
from Employees
order by 1 desc -- optional to get the last records using the fist column of the table