插入以递增数字顺序连接的文本

时间:2019-09-27 11:16:43

标签: sql sql-server string sql-server-2014

我想在表格中插入1000行。我想生成并插入的数据是TEXT0001TEXT1000。因此,一位数字需要有3个前导零(例如1-> 0001),两位数字需要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的方法是最好的方法,我应该避免循环,但是没有实际的例子可以指出正确的方向。

请问我该怎么做?

3 个答案:

答案 0 :(得分:1)

我认为您需要以下

INSERT INTO projects
  SELECT TOP (1000) "TEXT" + right('0000',cast ((ROW_NUMBER()OVER (ORDER BY [object_id])) as varchar),4)
  FROM sys.all_objects ;

答案 1 :(得分:1)

我建议保留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;

答案 2 :(得分:0)

经过语法更正和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