У меня есть конкретный вопрос.
Моя хранимая процедура не работает правильно. Я покажу вам процедуру, базу данных и параметр:
ALTER PROCEDURE [dbo].[ManufacturerParentToChild]
@ServiceProviderId int,
@CarmakerId int
AS BEGIN
SET NOCOUNT ON;
DECLARE @childSPPId int, @isDeleted bit
DECLARE ServiceProviderChildren_Cursor CURSOR FOR
SELECT ServiceProviderId, isDeleted
FROM ServiceProvider
WHERE ParentServiceProviderId = @ServiceProviderId;
OPEN ServiceProviderChildren_Cursor;
FETCH NEXT FROM ServiceProviderChildren_Cursor INTO @childSPPId, @isDeleted;
WHILE @@FETCH_STATUS = 0
BEGIN
IF @ServiceProviderId > 0
BEGIN
EXEC ManufacturerParentToChild @childSPPId, @CarmakerId;
IF (SELECT COUNT(*) FROM dbo.CarmakerPartnership WHERE ServiceProviderId = @childSPPId AND CarmakerId = @CarmakerId) = 0
BEGIN
IF (@isDeleted = 0)
BEGIN
INSERT INTO dbo.CarmakerPartnership (CarmakerId, ServiceProviderId, CreatedBy, ChangedBy, ValidityPeriodFrom, ValidityPeriodTo) VALUES (@CarmakerId, @childSPPId, SYSTEM_USER, SYSTEM_USER, '01.01.1900 00:00:00', '31.12.9999 23:59:00.000')
END
END
END
FETCH NEXT FROM ServiceProviderChildren_Cursor INTO @childSPPId;
END;
CLOSE ServiceProviderChildren_Cursor;
DEALLOCATE ServiceProviderChildren_Cursor; END
Вы видите мою хранимую процедуру выше.
Поставщик службы таблиц базы данных имеет 7 строк:
ServiceProviderId Name ParentServiceProviderId isDeleted
1 'Parent' Null 02 'Child1' 1 03 'Child2' 1 04 'Child4' 2 05 'Child5' 3 06 'child6' 4 07 'Child7' 6 0
Параметр получает значения:
@ ServiceProviderId = 1 @CarmakerId = 5
Процедура вставляет ServiceProviderId 7, 6, 4 и 2 в CarmakerPartnerShip, но невставьте 3 и 5!
У кого-нибудь есть идея, почему рекурсивный цикл переходит через дочерние элементы ServiceProviderId = 2, но не пересекает дочерние элементы ServiceProviderId = 3 ??
Спасибо заВаша помощь и извините за мой плохой английский !!
Если у вас есть вопросы, вы можете задать их мне.
С наилучшими пожеланиями
Алекс