我有以下腳本,它以'ABC-1234'格式生成175百萬(!)個獨特的字母數字代碼,範圍從AAA-0000到ZZZ- 9999。如何加快創建大數字表的Alpha數字代碼的SQL腳本
在我的專用MS SQL 2016框中按原樣運行此腳本需要20個小時。加快速度的最佳方法是什麼?從腳本中可以看出,我的SQL技能有點欠缺!
有一個Identity(int)列,ID和CODE列(nvarchar(20))本身。兩列組成的主鍵:
CREATE TABLE [dbo].[ORDERED_CODES](
[ID] [int] NOT NULL,
[Code] [nvarchar](20) NOT NULL,
CONSTRAINT [PK_ORDERED_CODES] PRIMARY KEY CLUSTERED
(
[ID] ASC,
[Code] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
腳本:
DECLARE @Alpha1 INT;
DECLARE @Alpha2 INT;
DECLARE @Alpha3 INT;
DECLARE @Num INT;
-- alpha elements 'ABC'
SET @Alpha1 = 65;
SET @Alpha2 = 65;
SET @Alpha3 = 65;
-- number element '9999'
SET @Num = 0;
-- temporary holders
DECLARE @FINALCODE Nvarchar(50);
DECLARE @CODE1 Nvarchar(50);
DECLARE @CODE2 Nvarchar(50);
DECLARE @CODE3 Nvarchar(50);
WHILE @Alpha1 < 91
BEGIN
SET @CODE1 = CHAR(@Alpha1)
WHILE @Alpha2 < 91
BEGIN
SET @CODE2 = @CODE1 + CHAR(@Alpha2)
SET @Alpha2 = @Alpha2 +1
WHILE @Alpha3 < 91
BEGIN
SET @CODE3 = @CODE2 + CHAR(@Alpha3)
SET @Alpha3 = @Alpha3 +1
WHILE @Num < 10000
BEGIN
SET @FINALCODE = RIGHT('0000'+ CAST(@Num as nvarchar(4)),4) + CHAR(45) + @CODE3
SET @Num = @Num +1
INSERT INTO ORDERED_CODES (CODE) VALUES (@FINALCODE)
END
SET @FINALCODE = null
SET @Num = 0
END
SET @Alpha3 = 65
END
SET @Alpha2 = 65
SET @Alpha1 = @Alpha1 +1
END;
的任何和所有的心思都衷心感謝!
感謝Gordon,Dan&John抽出寶貴時間來幫忙,所有這些都是對同一主題的很好回答,所以我不得不選擇一個作爲答案...所以最好的SO傳統必須去Gordon爲了第一。不用說我將閱讀CTE!最快的是Dan,在我的服務器上將近4分鐘 - 我現在需要試着弄清楚爲什麼我的胖服務器比你的桌面慢5倍!比20小時好得多,我非常感謝。乾杯! –