Вставить текст, соединенный с увеличивающейся числовой последовательностью - PullRequest
0 голосов
/ 27 сентября 2019

Я хотел бы вставить 1000 строк в таблицу.Данные, которые я хотел бы сгенерировать и вставить, составляют от TEXT0001 до TEXT1000.Таким образом, одиночные цифры должны иметь 3 начальных нуля (например, 1 -> 0001), 2 цифры должны иметь 2 начальных нуля (2 -> 0091) и т. Д.

Я смотрел на этот ответ наКак создать диапазон чисел без использования цикла, и это работает, но мне нужно добавить текст перед номером.

Я попытался:

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 ]

1 голос
/ 27 сентября 2019

Я бы рекомендовал сохранить 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;
1 голос
/ 27 сентября 2019

Я думаю, вам нужно ниже

INSERT INTO projects
  SELECT TOP (1000) "TEXT" + right('0000',cast ((ROW_NUMBER()OVER (ORDER BY [object_id])) as varchar),4)
  FROM sys.all_objects ;
0 голосов
/ 27 сентября 2019

После некоторой коррекции синтаксиса и функции 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...