我有以下脚本,它以'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小时好得多,我非常感谢。干杯! –