[SQL Server] クーポンコード(シリアルコード)発行する方法

inno
2016-08-12 12:43 1020 0
クーポンコードを登録するテーブルを作成します。

CREATE TABLE dbo.CouponCode (
CouponCode varchar(30) PRIMARY KEY NOT NULL
)

下記のSQLは16文字のクーポンを10個発行する場合のSQLです。

DECLARE @CouponNum int, @CouponCode varchar(16)

-- #### 発行するクーポン数
SET @CouponNum = 10

WHILE (@CouponNum > 0)
BEGIN
-- #### MD5よりNEWID()を利用するのが処理速度が速い
-- #### 数字の「0」は英文字「O」と似ているので出ないように「A」など他の文字に変更
-- #### 数字の「1」は英文字の大文字「I」,[L]の小文字「l」と似ているので出ないように「B」など他の文字に変更
SET @CouponCode = LEFT(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(NEWID(),'0','A'),'1','B'),'O','C'),'I','D'),'-',''), 16)

-- #### 発行したクーポン番号が存在しないクーポン番号の場合のみ登録を行う。
-- #### 存在するクーポン番号の場合、再度発行作業を行う。
IF NOT EXISTS (SELECT TOP 1 1 FROM dbo.CouponCode WITH (NOLOCK) WHERE CouponCode = @CouponCode)
BEGIN
INSERT INTO dbo.CouponCode(CouponCode) 
VALUES (@CouponCode)
SET @CouponNum = @CouponNum - 1
END
END

クーポン発行数を変更したい場合は、上記のSQLで下記の部分を数字を変更します。

-- #### 発行するクーポン数
SET @CouponNum = 10

クーポンコードの文字数が16文字にしていますが、最大32文字まで長さを調整することができます。
長さの調整は上記のSQLで下記の部分の数字を変更します。

SET @CouponCode = LEFT(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(NEWID(),'0','A'),'1','B'),'O','C'),'I','D'),'-',''), 16)


クーポンを4文字ずつ分けて間に「-」を入れたい場合は下記のようにSELECTとします。

SELECT TOP 10 CouponCode, SUBSTRING(CouponCode,1,4)+'-'+SUBSTRING(CouponCode,5,4)+'-'+SUBSTRING(CouponCode,9,4)+'-'+SUBSTRING(CouponCode,13,4)
FROM dbo.CouponCode WITH (NOLOCK)

実行結果

コメント