sql
-
sql에서 정수 괄호 숫자의 의미 bigint(5)프로그래밍/의문 2018. 7. 24. 15:51
CREATE TABLE account_battle_pet_slots ( accountId int(10) NOT NULL DEFAULT '0', slot1 bigint(20) NOT NULL DEFAULT '0', slot2 bigint(20) NOT NULL DEFAULT '0', flags tinyint(3) NOT NULL DEFAULT '0', PRIMARY KEY (accountId)) 같은 쿼리를 봤다. MSSQL은 쿼리 실행도 안 되더라.위 쿼리는 MYSQL에서 사용된 쿼리인데 의미를 찾아보니 다음과 같았다. 결과 값을 출력할 때 앞에 0을 몇 개 표기할 건지를 지정한다. bigint(5)로 지정된 slot1에 1을 설정했다고 치자. 그럼 select 시 00001 같은 형식으로 보여지게 된다..
-
DB RETURN을 명시적으로 지정하지 않아 임의로 값이 바뀐 경우프로그래밍/의문 2018. 4. 6. 12:22
ALTER PROCEDURE spGiveStageClearReward @AccountID BIGINT, @StageID INT, @RewardItemID INTAS BEGIN BEGIN TRY INSERT INTO GameLog.dbo.ClearRewardLog ( AccountUniqueID, -- NOT NULL StageID, -- NOT NULL RewardValue) -- NOT NULL VALUES (@AccountID, @StageID, @RewardItemID, GETDATE()) END TRY BEGIN CATCH -- IGNORE EXCEPTION END CATCHEND위 프로시저에 인자로 NULL이 넘어오면 INSERT 구문은 예외를 뿜지만, try~catch 구문이 걸려있으므로 예외..
-
저장 프로시저 동시 호출로 인해 행 개수 조절에 실패한 경우프로그래밍/의문 2017. 12. 19. 11:40
0. 길드원 추가 프로시저1. 현재 길드원 수 체크2. 현재 길드원이 n명이 아니라면 길드원 추가 0, 길드원 수 체크 시점에서는 n명 미만이었지만 2, 추가하려는 시점에서 n명이 되어버려 오버하는 경우가 발생할 여지가 있다.(2개 이상의 세션이 있을 경우 충분히 발생 가능하다.) insert into GuildMembers ...group by [GuildUniqueID] having count(*) < nif(@@ROWCOUNT = 0)...insert와 동시에 개수를 체크함으로 해당 현상을 완화할 수 있다.(read uncommitted)
-
join의 유용함을 느낌일상/잡담 2016. 8. 14. 19:00
sql을 다루는 게 익숙하지 않아, join이라는 게 있다는 것만 알았지 어떤 상황에서 쓰면 유용하다! 이런걸 마음 깊숙한 곳에선 느끼지 못했다. 그러나 최근 지인이 사용할 간단한 회원 관리 프로그램을 만들어보면서 이런 상황이 있었다. 상황 >> 0. 테이블은 TIME, MEMBER로 나뉘어져있다.1. TIME은 타임 아이디 만료일(EXPDATE), 남은 시간등의 컬럼을 가진다.2. MEMBER는 회원 이름, 타임 아이디를 가진다.3. 그리고 시간의 만료일이 지난 회원들을 검색한다. join을 사용하기 전에는 TIME 테이블에서 만료된 TIME을 가져온다. 타임 아이디와 일치하는 회원들을 가져온다. 둘을 합쳐서 보여준다. 를 따로따로 했었고 이는 코드로 대략 이런식으로 표현이 되었었다. 그리고 join을..