Установите подход на основе SQL Server, где один столбец вычисляется как Макс из того же столбца

Мне интересно, если это одна из тех ситуаций, когда я вынужден использовать курсор или я могу использовать подход, основанный на наборе.

У меня есть таблица SuperSupplierCodes, которая содержит два столбца: SuperSupplierCode INT и SupplierName NVARCHAR (50), и я попытался придумать решение самостоятельно безрезультатно.

).

SuperSupplierID SupplierName
1               21ST CENTURY GRAPHIC TECHNOLOGIES LLC
2               3D SYSTEMS
3               3G
4               A A ABRASIVOS ARGENTINOS SAIC
5               A AND F DRUCKLUFTTECHNIK GMBH
6               A BAY STATIONERS
7               A C T TOOL AND ENGINEERING LLC
8               A HERZOG AG
9               A LI T DI MONTANARI MARCO AND CO SAS
11              A RAYMOND GMBH AND CO KG

У меня есть вторая таблица с миллионами строк в ней, содержащая финансовые данные, а также столбец SupplierName.

LocalSupplierName
23 JAN HOFMEYER ROAD
303 TAXICAB, LLC
3D MECA SARL
3D SYSTEMS
3E CO ENVIRONMENTAL, ECO. & EN
3E COMPANY

Что мне нужно сделать вставляет в таблицу SuperSupplierCodes такую, что каждая строка получает MAX (SuperSupplierCode) из предыдущей строки, увеличивает ее на единицу и вставляет ее в столбец SuperSupplierCode вместе с именем поставщика из второй таблицы.

I Я попробовал следующее, как тест, которое я мог бы использовать для вставки, но, конечно, он будет делать только один раз и попытаться использовать то же самое значение для SuperSupplierCode для каждой строки:

SELECT s.SuperSupplierID,
   s.SupplierName,
   s.SupplierAddress,
   s.DateCreated,
   s.DateModified,
   s.SupplierCode,
   s.PlantName,
   s.id,
   x.MaxSSC
FROM SuperSupplierCodes AS s
CROSS APPLY (SELECT MAX(SuperSupplierID)+1 AS MaxSSC FROM dbo.SuperSupplierCodes) x;

Мне не нравятся курсоры, если я не обязан. Есть ли способ сделать это с T-SQL в основе набора по сравнению с использованием курсора?

0
задан 13 August 2018 в 15:10

1 ответ

Создайте столбец как идентификатор и вставьте существующие записи один раз, используя опцию SET IDENTITY_INSERT ON. Затем отключите его для добавления новых идентификаторов, и они будут увеличены.

https://docs.microsoft.com/en-us/sql/t-sql/statements/set-identity-insert-transact-sql?view=sql-server-2017

1
ответ дан 15 August 2018 в 17:02

Другие вопросы по тегам:

Похожие вопросы: