쿠폰같은 난수를 생성하고 기존에 있는지 체크한 뒤 없으면 테이블에 입력하는 코드를 적성해봤다.
(본인은 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