В последние годы я приложил много усилий в c # и немного оставил SQL Server.
Мои навыки sql могут быть лучше.
Я знаю, что курсоры работают медленно и т. Д. Я собрал странный пример, с которым мне, кажется, приходится сталкиваться на работе.
Мне нужно перенести данные из одной плоской таблицы «Клиент»
во многих таблицах
"CustomerAddress" "CustomerPhone" и т. Д.
Если бы вам было поручено это задание, как бы вы справились без использования курсоров?
Курсор для преобразования
BEGIN TRANSACTION
DECLARE @CustomerID int,
@Name nvarchar(50),
@Surname nvarchar(50),
@DateOfBirth datetime,
@Address nvarchar(200),
@City nvarchar(50),
@County nvarchar(50),
@Country nvarchar(50),
@HomePhone nvarchar(20)
DECLARE OldCustomerCursor CURSOR FAST_FORWARD
FOR
SELECT CustomerID,Name,Surname,DateOfBirth,Address,City,County,Country,HomePhone
FROM OldCustomer
OPEN OldCustomerCursor
FETCH NEXT FROM OldCustomerCursor INTO @CustomerID,
@Name ,
@Surname ,
@DateOfBirth ,
@Address ,
@City ,
@County ,
@Country ,
@HomePhone
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT [dbo].[Customer] ([CustomerID], [Name], [Surname], [DateOfBirth])
VALUES(@CustomerID,@Name,@Surname,@DateOfBirth)
INSERT [CustomerAddress]([AddressID],[CustomerID],[Country],[Address],[City],[County])
VALUES(@Count,@CustomerID,@County,@Address,@City,@Country)
INSERT [dbo].[CustomerTelephone]([TelephoneID],[CustomerID],[Number])
VALUES(@Count,@CustomerID, @HomePhone)
FETCH NEXT FROM OldCustomerCursor INTO @CustomerID,
@Name ,
@Surname ,
@DateOfBirth ,
@Address ,
@City ,
@County ,
@Country ,
@HomePhone
END
CLOSE OldCustomerCursor
DEALLOCATE OldCustomerCursor
SELECT * FROM Customer
SELECT * FROM CustomerAddress
SELECT * FROM CustomerTelephone
ROLLBACK TRANSACTION
Спасибо за любые предложения, как заменить курсор