Dynamic SELECT TOP @var W SQL Server


308

Jak mogę ustawić zmienną dynamiczną, która określa liczbę wierszy do zwrócenia w programie SQL Server? Poniżej nie jest poprawna składnia w SQL Server 2005+:

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable

2
Czy korzystasz z SQL 2005 lub 2008?
Brian Kim,

Odpowiedzi:


561
SELECT TOP (@count) * FROM SomeTable

Działa to tylko z SQL 2005+


52
Zawsze też zapominam o nawiasach.
John Sheehan,

14
to jest świetne! cały czas myślałem, że muszę użyć dynamicznego SQL.
Laguna

1
Kto jeszcze jest tutaj, aby uświadomić sobie głupi błąd w swoim zapytaniu, nie dodając nawiasów?
Raghav,

Uratowałeś mi dzień! Pomyślałem o przeniesieniu wszystkich zapytań dynamicznych tylko w tym celu!
Altaf Patel

41

Składnia „select top (@var) ...” działa tylko w SQL SERVER 2005+. W przypadku SQL 2000 możesz:

set rowcount @top

select * from sometable

set rowcount 0 

Mam nadzieję że to pomoże

Oisin.

(edytowane w celu zastąpienia @@ rowcount przez rowcount - dzięki sierpień)


1
Słyszałem, że można uzyskać niepoprawny numer wiersza za pomocą @@ RowCount, jeśli masz klucz główny z wieloma kolumnami. Czy to prawda?
Brian Kim,


4

Możliwe jest również użycie dynamicznego SQL i wykonanie go za pomocą polecenia exec:

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

8

4

Lub po prostu umieść zmienną w nawiasie

DECLARE @top INT = 10;

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

4
declare @rows int = 10

select top (@rows) *
from Employees
order by 1 desc -- optional to get the last records using the first column of the table
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.