Мне интересно, если это одна из тех ситуаций, когда я вынужден использовать курсор или я могу использовать подход, основанный на наборе.
У меня есть таблица 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 в основе набора по сравнению с использованием курсора?
Создайте столбец как идентификатор и вставьте существующие записи один раз, используя опцию SET IDENTITY_INSERT ON. Затем отключите его для добавления новых идентификаторов, и они будут увеличены.
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-identity-insert-transact-sql?view=sql-server-2017