SQL Server'da Dinamik SELECT TOP @var


308

SQL Server'da döndürülecek satır miktarını ayarlayan bir dinamik değişkeni nasıl alabilirim? Aşağıda SQL Server 2005+ için geçerli bir sözdizimi yoktur:

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable

2
SQL 2005 veya 2008 çalıştırıyor musunuz?
Brian Kim

Şu anda SQL Server 2005 çalıştırıyor
eddiegroves

Yanıtlar:


561
SELECT TOP (@count) * FROM SomeTable

Bu yalnızca SQL 2005+ ile çalışır


52
Parantezleri de her zaman unuturum.
John Sheehan

14
bu harika! Bunca zaman dinamik sql kullanmak zorunda olduğumu düşündüm.
Laguna

1
Parantez eklemeyerek sorgularındaki aptal hatayı gerçekleştirmek için başka kimler var?
Raghav

Günümü kurtardın! Sadece bunun için dinamik sorguya taşımak düşündüm!
Altaf Patel

41

"Select top (@var) ..." sözdizimi yalnızca SQL SERVER 2005+ ile çalışır. SQL 2000 için şunları yapabilirsiniz:

set rowcount @top

select * from sometable

set rowcount 0 

Bu yardımcı olur umarım

Oisin.

(@@ rowcount yerine rowcount yazılmıştır - teşekkürler augustlights)


1
Çok sütunlu birincil anahtarınız varsa @@ RowCount ile yanlış satır numarası almanın mümkün olduğunu duydum. Bu doğru mu?
Brian Kim


4

Dinamik SQL kullanmak ve exec komutu ile çalıştırmak da mümkündür:

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

8
Ancak bu yaklaşımla SQL enjeksiyon saldırılarına karşı çok dikkatli olun
MadSkunk

4

Ya da sadece değişkeni parantez içine alırsınız

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.