사용자 도구

사이트 도구


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