db:sql팁

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
db:sql팁 [2012/04/20 19:33] – 바깥 편집기 127.0.0.1db:sql팁 [2024/04/23 22:43] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
  
 +테이블 카피
 +
 +<code sql>
 +-- SRC_TABLE 을 DST_TABLE 라는 새 테이블을 만들고 내용을 복사한다.
 +select * into DST_TABLE FROM SRC_TABLE
 +</code>
 +
 +일부만 우선 보기
 +
 +<code sql>
 +-- 걸리는 10개만 우선 보고 싶을때
 +select top 10 * from TABLE_NAME
 +</code>
 +
 +select 실행 락걸리지 않게
 +
 +<code>
 +-- TUser 와 TempUser? 에 같은 아이디를 갖고 있는 사람들의 e-mail 주소
 +-- with(nolock)으로 락 걸리는 일이 안생기도록 한다.
 +-- 책의 예제에서 보고 따라 한거라서..
 +select TUser.userid, TUser.email, TempUser?.id
 +from TUser INNER JOIN TempUser? WITH(NOLOCK)
 +on TUser.userid = TempUser?.id;
 +</code>
 +
 +update
 +
 +<code sql>
 +-- update 하기
 +update (table) set (field)=(newvalue) where (condition)
 +</code>
 +
 +쿼리 실행 계획얻기
 +
 +<code sql>
 +set showplan_all on
 +-- 쿼리
 +set showplan_all off
 +</code>
 +
 +특정 확률로 가챠 뽑히는거를 시뮬레이션
 +++++ 코드 길어서 접어둠 |
 +<code sql>
 +-- 14 개의 아이템 중에 한개를 고른다. 위에서 아래로 우선순위가 있고
 +-- 각각 오른쪽이 나올 확률
 +BEGIN
 +       -----------------------------------------
 +       -- Probability table with priority
 +       -- 5         0.05
 +       -- 10        0.05
 +       -- 210       2.00
 +       -- 800       5.90
 +       -- 1400      6.00
 +       -- 2000      6.00
 +       -- 2833      8.33
 +       -- 3666      8.33
 +       -- 4499      8.33
 +       -- 5599      11.00
 +       -- 6699      11.00
 +       -- 7799      11.00
 +       -- 8899      11.00
 +       -- 10000     11.01
 +       -------------------------------------------
 +
 +       DECLARE @SeedByDate bigint;
 +       DECLARE @RandomNumber float;
 +       DECLARE @PgItemId smallint;
 +
 +       -- get seed value
 +       SELECT @SeedByDate = (DATEPART(mm, GETDATE()) * 100000 ) / RAND();
 +       -- get rand number and make it large to easy compare
 +       SELECT @RandomNumber = RAND( @SeedByDate ) * 10000; 
 +
 +       --for debug
 +       SELECT @SeedByDate, @RandomNumber;
 +
 +       SET @PgItemId = 0;
 +
 +       -- simply check
 +       IF @RandomNumber < 5
 +             BEGIN
 +             SET @PgItemId = 1;
 +             END
 +       ELSE IF @RandomNumber < 10 
 +             BEGIN
 +             SET @PgItemId = 2;
 +             END
 +       ELSE IF @RandomNumber < 210
 +             BEGIN
 +             SET @PgItemId = 3;
 +             END
 +       ELSE IF @RandomNumber < 800
 +             BEGIN
 +             SET @PgItemId = 4;
 +             END
 +       ELSE IF @RandomNumber < 1400
 +             BEGIN
 +             SET @PgItemId = 5;
 +             END
 +       ELSE IF @RandomNumber < 2000
 +             BEGIN
 +             SET @PgItemId = 6;
 +             END
 +       ELSE IF @RandomNumber < 2833
 +             BEGIN
 +             SET @PgItemId = 7;
 +             END
 +       ELSE IF @RandomNumber < 3666
 +             BEGIN
 +             SET @PgItemId = 8;
 +             END
 +       ELSE IF @RandomNumber < 4499
 +             BEGIN
 +             SET @PgItemId = 9;
 +             END
 +       ELSE IF @RandomNumber < 5599
 +             BEGIN
 +             SET @PgItemId = 10;
 +             END
 +       ELSE IF @RandomNumber < 6699
 +             BEGIN
 +             SET @PgItemId = 11;
 +             END
 +       ELSE IF @RandomNumber < 7799
 +             BEGIN
 +             SET @PgItemId = 12;
 +             END
 +       ELSE IF @RandomNumber < 8899
 +             BEGIN
 +             SET @PgItemId = 13;
 +             END
 +       ELSE IF @RandomNumber < 10000
 +             BEGIN
 +             SET @PgItemId = 14;
 +             END
 +
 +       --debug
 +       --SELECT @PgItemId
 +       IF @PgItemId <> 0
 +             BEGIN
 +             SELECT * FROM dbo.tbillDefItemLoto WHERE seqno = @PgItemId
 +             END
 +       ELSE
 +             BEGIN
 +             SELECT NULL;
 +             END
 +END
 +
 +--- 더 짧게 --
 +declare @result int
 +declare @rate float
 +set @rate = round(rand(),4) * 100
 +select @rate
 +
 +select @result = count(*) + 1
 +from (
 +              select a.seqno, (select sum(per) from dbo.tbillDefItemLoto b where b.seqno <= a.seqno) as sum_per
 +              from dbo.tbillDefItemLoto a
 +        ) b
 +where sum_per < @rate
 +
 +select @result
 +</code>
 +
 +++++
 +
 +SP 내부에서 임시로 테이블을 만들어서 사용하고자 할때
 +
 +<code sql>
 +-- 변수로 선언한 테이블을 SP 내부에서 사용가능하다
 +USE AdventureWorks;
 +GO
 +DECLARE @MyTableVar table(
 +    EmpID int NOT NULL,
 +    OldVacationHours int,
 +    NewVacationHours int,
 +    ModifiedDate datetime);
 +UPDATE TOP (10) HumanResources.Employee
 +SET VacationHours = VacationHours * 1.25 
 +OUTPUT INSERTED.EmployeeID,
 +       DELETED.VacationHours,
 +       INSERTED.VacationHours,
 +       INSERTED.ModifiedDate
 +INTO @MyTableVar;
 +--Display the result set of the table variable.
 +SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate
 +FROM @MyTableVar;
 +GO
 +--Display the result set of the table.
 +--Note that ModifiedDate reflects the value generated by an
 +--AFTER UPDATE trigger.
 +SELECT TOP (10) EmployeeID, VacationHours, ModifiedDate
 +FROM HumanResources.Employee;
 +GO
 +</code>
 +
 +2009 6 18 써본 것
 +<code>
 +begin tran
 +alter table A_090618 alter column FieldName int not null
 +commit
 +
 +select * into A_bak_090618 from A
 +
 +begin tran
 +drop table A
 +commit
 +
 +select * into A from A_090618
 +</code>