테이블 카피 -- 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