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.