クーポンコードを登録するテーブルを作成します。
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)
実行結果