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