插入与递增数字序列连接的文本
Insert text concatenated with incrementing number sequence
我想在 table 中插入 1000 行。我想要生成和插入的数据是 TEXT0001
到 TEXT1000
。所以单个数字需要有 3 个前导零(例如 1 -> 0001),2 个数字需要 2 个前导零(2 -> 0091)等
我查看了 this 关于如何在不使用循环的情况下生成一系列数字的答案并且可行,但我需要在数字前面添加文本。
我试过:
INSERT INTO projects
SELECT TOP (1000) CONCAT("TEXT", n) = ROW_NUMBER()OVER (ORDER BY [object_id])
FROM sys.all_objects ORDER BY n;
但这给出了一个错误 - incorrect syntax near =
。
我读到过使用基于 SET
的方法是最好的方法,我应该避免循环,但没有实际的例子可以指出正确的方向。
请问我该怎么做?
我认为你需要以下内容
INSERT INTO projects
SELECT TOP (1000) "TEXT" + right('0000',cast ((ROW_NUMBER()OVER (ORDER BY [object_id])) as varchar),4)
FROM sys.all_objects ;
我建议保留 concat()
并修正语法:
INSERT INTO projects (<column name here>)
SELECT TOP (1000) CONCAT('TEXT',
FORMAT(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), '0000')) as n
FROM sys.all_objects
ORDER BY n;
经过一些语法更正和 FORMAT
功能后,您拥有:
INSERT INTO #temp
SELECT TOP 1000 'TEXT' + FORMAT(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), '0000') AS n
FROM sys.all_objects
ORDER BY n -- it is a zero-padded varchar suitable for order-by
我想在 table 中插入 1000 行。我想要生成和插入的数据是 TEXT0001
到 TEXT1000
。所以单个数字需要有 3 个前导零(例如 1 -> 0001),2 个数字需要 2 个前导零(2 -> 0091)等
我查看了 this 关于如何在不使用循环的情况下生成一系列数字的答案并且可行,但我需要在数字前面添加文本。
我试过:
INSERT INTO projects
SELECT TOP (1000) CONCAT("TEXT", n) = ROW_NUMBER()OVER (ORDER BY [object_id])
FROM sys.all_objects ORDER BY n;
但这给出了一个错误 - incorrect syntax near =
。
我读到过使用基于 SET
的方法是最好的方法,我应该避免循环,但没有实际的例子可以指出正确的方向。
请问我该怎么做?
我认为你需要以下内容
INSERT INTO projects
SELECT TOP (1000) "TEXT" + right('0000',cast ((ROW_NUMBER()OVER (ORDER BY [object_id])) as varchar),4)
FROM sys.all_objects ;
我建议保留 concat()
并修正语法:
INSERT INTO projects (<column name here>)
SELECT TOP (1000) CONCAT('TEXT',
FORMAT(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), '0000')) as n
FROM sys.all_objects
ORDER BY n;
经过一些语法更正和 FORMAT
功能后,您拥有:
INSERT INTO #temp
SELECT TOP 1000 'TEXT' + FORMAT(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), '0000') AS n
FROM sys.all_objects
ORDER BY n -- it is a zero-padded varchar suitable for order-by