복붙노트

[SQL] 그것은 동적하지 않고 SQL Server의 select 문에서 TOP과 함께 사용 변수 [중복]

SQL

그것은 동적하지 않고 SQL Server의 select 문에서 TOP과 함께 사용 변수 [중복]

declare @top  int
set @top = 5
select top @top * from tablename

그것은 수 있습니까?

또는 이러한 논리에 대한 어떤 생각 (내가 동적 쿼리를 사용하지 않음)?

해결법

  1. ==============================

    1.예, SQL 서버 2005은 최고 절에 변수를 사용하는 것이 가능하다.

    예, SQL 서버 2005은 최고 절에 변수를 사용하는 것이 가능하다.

    select top (@top) * from tablename
    
  2. ==============================

    2.SQL Server 2005는 실제로 변수, 표현식 또는 문을 사용하여, 우리가 TOP 절을 매개 변수화 할 수 있습니다. 당신이 할 수있는 그래서 일이 같은 :

    SQL Server 2005는 실제로 변수, 표현식 또는 문을 사용하여, 우리가 TOP 절을 매개 변수화 할 수 있습니다. 당신이 할 수있는 그래서 일이 같은 :

    SELECT TOP (@foo) a FROM table ORDER BY a 
    
    SELECT TOP (SELECT COUNT(*) FROM somewhere else) a FROM table ORDER BY a 
    
    SELECT TOP (@foo + 5 * 4 / 2) a FROM table ORDER BY a 
    

    출처

  3. ==============================

    3.이 스레드에서 몇 가지 답변이 있기 때문에 2005 년 이후, 당신은 그것을 할 수 있습니다.

    이 스레드에서 몇 가지 답변이 있기 때문에 2005 년 이후, 당신은 그것을 할 수 있습니다.

    덜 알려진 뭐죠은 SET의 ROWCOUNT를 사용하여, 2K에서이를 달성 할 수 있다는 것입니다.

      -- Works in all versions
      SELECT TOP 10
    
      -- Does not work on 2000
      SELECT TOP (10)
      SELECT TOP (@rows)
    
      -- Works in both 2ooo and 2oo5
      SET ROWCOUNT @max
    
      SELECT * 
      FROM ...
    
      SET ROWCOUNT 0
    

    참고, 당신은 끝 제한이 지속에 SET의 ROWCOUNT 0을 잊지 .. 당신이 버그를 찾을 열심히로 끝날 것인지 :-)

  4. from https://stackoverflow.com/questions/1927450/use-variable-with-top-in-select-statement-in-sql-server-without-making-it-dynami by cc-by-sa and MIT license