db:sql팁
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판 | |||
db:sql팁 [2013/06/10 12:35] – kieuns | db: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 sql> | ||
+ | -- 걸리는 10개만 우선 보고 싶을때 | ||
+ | select top 10 * from TABLE_NAME | ||
+ | </ | ||
+ | |||
+ | select 실행 락걸리지 않게 | ||
+ | |||
+ | < | ||
+ | -- TUser 와 TempUser? 에 같은 아이디를 갖고 있는 사람들의 e-mail 주소 | ||
+ | -- with(nolock)으로 락 걸리는 일이 안생기도록 한다. | ||
+ | -- 책의 예제에서 보고 따라 한거라서.. | ||
+ | select TUser.userid, | ||
+ | from TUser INNER JOIN TempUser? WITH(NOLOCK) | ||
+ | on TUser.userid = TempUser? | ||
+ | </ | ||
+ | |||
+ | update | ||
+ | |||
+ | <code sql> | ||
+ | -- update 하기 | ||
+ | update (table) set (field)=(newvalue) where (condition) | ||
+ | </ | ||
+ | |||
+ | 쿼리 실행 계획얻기 | ||
+ | |||
+ | <code sql> | ||
+ | set showplan_all on | ||
+ | -- 쿼리 | ||
+ | set showplan_all off | ||
+ | </ | ||
+ | |||
+ | 특정 확률로 가챠 뽑히는거를 시뮬레이션 | ||
+ | ++++ 코드 길어서 접어둠 | | ||
+ | <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 | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | -- get seed value | ||
+ | | ||
+ | -- get rand number and make it large to easy compare | ||
+ | | ||
+ | |||
+ | --for debug | ||
+ | | ||
+ | |||
+ | 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 | ||
+ | |||
+ | | ||
+ | | ||
+ | IF @PgItemId <> 0 | ||
+ | BEGIN | ||
+ | | ||
+ | END | ||
+ | ELSE | ||
+ | BEGIN | ||
+ | | ||
+ | END | ||
+ | END | ||
+ | |||
+ | --- 더 짧게 -- | ||
+ | declare @result int | ||
+ | declare @rate float | ||
+ | set @rate = round(rand(), | ||
+ | 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 | ||
+ | </ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | 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, | ||
+ | | ||
+ | | ||
+ | | ||
+ | INTO @MyTableVar; | ||
+ | --Display the result set of the table variable. | ||
+ | SELECT EmpID, OldVacationHours, | ||
+ | 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, | ||
+ | FROM HumanResources.Employee; | ||
+ | GO | ||
+ | </ | ||
+ | |||
+ | 2009 6 18 써본 것 | ||
+ | < | ||
+ | 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 | ||
+ | </ |