db:sql팁
테이블 카피
-- SRC_TABLE 을 DST_TABLE 라는 새 테이블을 만들고 내용을 복사한다. SELECT * INTO DST_TABLE FROM SRC_TABLE
일부만 우선 보기
-- 걸리는 10개만 우선 보고 싶을때 SELECT top 10 * FROM TABLE_NAME
select 실행 락걸리지 않게
-- 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;
update
-- update 하기 UPDATE (TABLE) SET (FIELD)=(newvalue) WHERE (condition)
쿼리 실행 계획얻기
SET showplan_all ON -- 쿼리 SET showplan_all off
특정 확률로 가챠 뽑히는거를 시뮬레이션 ++++ 코드 길어서 접어둠 |
-- 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
++++
SP 내부에서 임시로 테이블을 만들어서 사용하고자 할때
-- 변수로 선언한 테이블을 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
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
db/sql팁.txt · 마지막으로 수정됨: 2024/04/23 22:43 저자 127.0.0.1