반응형
- /**********************************************************************************************
-- 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 - -- top n 에 변수 사용 가능
declare @p as int;
set @p=10;
select top(@p)* from t1;
go - -- 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 - -- 대량의 데이터를 삭제하는 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 - -- top에 식 사용 가능
select top(select max(c1) from t2) *
from t1;
go
반응형