쿠폰같은 난수를 생성하고 기존에 있는지 체크한 뒤 없으면 테이블에 입력하는 코드를 적성해봤다.
(본인은 7944-5641-7218 이런 형식의 숫자와 - (하이픈)이 있는 쿠폰 코드를 만들기 위해 코드를 작성했음)
DECLARE @l_S_LIMIT INT, @l_S_LIMIT2 INT,
@l_E_LIMIT INT
DECLARE @i INT
DECLARE @j INT
DECLARE @randomCode VARCHAR(12)
DECLARE @randomCodeTmp VARCHAR(1)
DECLARE @sp VARCHAR(1)
DECLARE @makeRandNumbersSet INT
DECLARE @RandNumbersLen INT
DECLARE @incrnum INT
DECLARE @code_total VARCHAR(14)
/* */
SET @makeRandNumbersSet = 2 /* 쿠폰 난수 작업 횟수*/
SET @RandNumbersLen = 12 /*생성할 난수 자릿수 */
SET @l_S_LIMIT = 1 /*첫번째 자리 숫자가 0이 나오면 숫자가 누락되어 자릿수가 11개가 되기 때문에 시작점을 1부터*/
SET @l_S_LIMIT2 = 0 /*두번째 자리 수자부터는 0부터 */
SET @l_E_LIMIT = 9 /*랜덤 숫자는 위 두 설정 ~9 사이*/
SET @i = 0
SET @j = 0
SET @sp = '-' /* 쿠폰 코드 중간에 - (하이픈) 문자로 넣으려고*/
SET @randomCode = ''
SET @incrnum = 0
WHILE @j < @makeRandNumbersSet
/* 쿠폰 생성 작업 반복 시작*/
BEGIN
WHILE @i < @RandNumbersLen
BEGIN
IF @i = '0' SET @randomCodeTmp = ROUND( ( (@l_E_LIMIT + 1) - @l_S_LIMIT ) * RAND(checksum(newid())) + @l_S_LIMIT , 0, 1)
/* 첫번째 자리에 0이 오지 않게 하는 조건문*/
ELSE SET @randomCodeTmp = ROUND( ( (@l_E_LIMIT + 1) - @l_S_LIMIT2 ) * RAND(checksum(newid())) + @l_S_LIMIT2 , 0, 1)
SET @randomCode = @randomCode + @randomCodeTmp
SET @i = @i + 1
END
SET @code_total = SUBSTRING(@randomCode, 1, 4) + @sp + SUBSTRING(@randomCode, 5, 4) + @sp + SUBSTRING(@randomCode, 9, 4)
/* 7944-5641-7218 처럼 쿠폰 형식으로 변경 */
PRINT @code_total
/* 생성된 코드 확인 */
IF NOT EXISTS(
/* 테이블에 기존 코드 중에 중복된게 없는지 체크 */
SELECT * from 테이블 where code = @code_total
)
BEGIN
/* 중복된 코드가 없다면 등록 */
INSERT INTO 테이블
([seq], [code], [regdate], [isUsed], [publish_round], [channel])
VALUES
(@incrnum, @code_total, Convert(varchar(30),Getdate(),120), 'N', '3', 'A')
END
SET @incrnum = @incrnum + 1
SET @i = 0;
SET @randomCode = ''
SET @j = @j + 1
END