SQL Server의 동적 SELECT TOP @var


308

SQL Server에서 반환 할 행 수를 설정하는 동적 변수를 어떻게 가질 수 있습니까? 아래는 SQL Server 2005+에서 유효한 구문이 아닙니다.

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable

2
SQL 2005 또는 2008을 실행 중입니까?
Brian Kim

현재 SQL Server 2005 실행
eddiegroves

답변:


561
SELECT TOP (@count) * FROM SomeTable

이것은 SQL 2005 이상에서만 작동합니다


52
나는 항상 괄호를 잊어 버린다.
John Sheehan

14
대단해! 이번에는 동적 SQL을 사용해야한다고 생각했습니다.
Laguna

1
괄호를 추가하지 않고 쿼리에서 바보 같은 실수를 깨닫기 위해 누가 여기에 있습니까?
Raghav

당신은 내 하루를 구했다! 나는 이것을 위해 모든 것을 동적 쿼리로 옮길 생각했습니다!
Altaf Patel

41

"select top (@var) ..."구문은 SQL SERVER 2005+에서만 작동합니다. SQL 2000의 경우 다음을 수행 할 수 있습니다.

set rowcount @top

select * from sometable

set rowcount 0 

도움이 되었기를 바랍니다

오이 신.

(@@ rowcount를 rowcount로 바꾸도록 편집했습니다. 감사합니다.)


1
다중 열 기본 키가 있으면 @@ RowCount로 잘못된 행 번호를 얻을 수 있다고 들었습니다. 그게 사실입니까?
Brian Kim


4

동적 SQL을 사용하고 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
그러나의 (매우) 조심 SQL 주입 공격 이 방법
MadSkunk

4

또는 그냥 변수를 괄호 안에 넣습니다.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.