반응형
  1. /**********************************************************************************************
    -- Title : [2k5] TOP (n)의 활용 스크립트
    -- Reference : mcpworld.com
    -- Key word : top select uptate insert delete go 100
    **********************************************************************************************/
    use tempdb;
    go
     
    drop table t1, t2, t3;
    go
     
    create table t1 (c1 int identity (1, 1));
    go
     
    set nocount on;
    go
     
    insert t1 default values;
    go 100
     
    select * from t1;
    go
  2. -- top n 에 변수 사용 가능
    declare @p as int;
    set @p=10;
    select top(@p)* from t1;
    go
  3. -- insert, update, delete 문에도 top을 사용할 수 있게 되었다
    /*
    -- 온라인 설명서 내용 :
    -- sql server의 다음 버전에서는 set rowcount 옵션을 사용해도
    -- delete, insert 및 update 문에 영향을 주지 않습니다.
    -- 신규 개발 작업에서는 set rowcount 옵션을 delete, insert 및 update 문과
    -- 함께 사용하지 말고, 현재 set rowcount 옵션을 사용하는 delete, insert 및
    -- update 문은 top 구문을 사용하여 다시 작성하는 것이 좋습니다.
    */
    create table t2 (c1 int);
    create table t3 (c1 int);
    go
    -- insert 문에 top을 지정한 경우 --> random
    insert top (2) into t2 (c1)
    select c1 from t1
    order by c1 desc;
    go
    select * from t2;
    go
    -- select 문에 top을 지정한 경우 --> 정렬 적용
    insert into t3 (c1)
    select top (2) c1 from t1
    order by c1 desc;
    go
    select * from t3;
    go
  4. -- 대량의 데이터를 삭제하는 delete 문에 활용 예제
    /*
    -- sql server 2005 이전 버전 : set rowcount 옵션 사용
    -- 하나의 대량 삭제 delete문은 작은 크기의 여러 개의 delete문으로
    -- 분할 수행하는 것이 좋음 (트랜잭션 로그, lock escalation)
    */
    while 1=1
    begin
      delete top(10000) from sales
      where dt < '20000101'
      if @@rowcount < 10000 break
    end
    go
  5. -- top에 식 사용 가능
    select top(select max(c1) from t2) *
    from t1;
    go
반응형

+ Recent posts