db:sql팁
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 다음 판 | 이전 판 | ||
| db:sql팁 [2012/04/20 19:33] – 바깥 편집기 127.0.0.1 | 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 | ||
| + | </ | ||