Хранимая процедура заполнить переменную ResultSet запроса - PullRequest
0 голосов
/ 10 февраля 2011

У меня есть небольшая проблема, но я не знаю решения!

Я написал хранимую процедуру. Функция этого не обязательна.

Я хочу объявить переменную из типа int.

Эта переменная должна получить значение SQL-запроса.

Моя попытка:

DECLARE @ParentServiceProviderId int = null     
SET @ParentServiceProviderId  = (SELECT ParentServiceProviderId 
                                 FROM ServiceProvider
                                 WHERE ServiceProviderId = @ServiceProviderId)

Это не сработало! ResultSet of the Query каждый раз имеет по одной строке!

Я не знаю, как решить эту проблему!

Вот полная хранимая процедура:

ALTER PROCEDURE [dbo].[InsertCarmakerPartnership_ChildToParent]

    @ServiceProviderId int,
    @CarmakerId int,
    @ValidFrom datetime,
    @ValidTo datetime
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    DECLARE @parentSPPId int, @parentSPPParentId int, @superParentId int, @ParentServiceProviderId int = null       

    SET @ParentServiceProviderId  = (SELECT ParentServiceProviderId 
                                     FROM ServiceProvider
                                     WHERE ServiceProviderId = @ServiceProviderId)      

    DECLARE ServiceProviderParent_Cursor CURSOR FOR

    SELECT ServiceProviderId, ParentServiceProviderId
    FROM ServiceProvider 
    WHERE ServiceProviderId = @ParentServiceProviderId

    OPEN ServiceProviderParent_Cursor;

    FETCH NEXT FROM ServiceProviderParent_Cursor INTO @parentSPPId, @parentSPPParentId 

    IF (@ParentServiceProviderId is NULL)
    BEGIN
        SET @superParentId = @ServiceProviderId
        EXEC InsertCarmakerPartnership_ParentToChild @superParentId, @CarmakerId, @ValidFrom, @ValidTo;
    END

    WHILE @@FETCH_STATUS = 0
BEGIN
    IF @ServiceProviderId > 0
    BEGIN
        EXEC InsertCarmakerPartnership_ChildToParent @parentSPPId, @CarmakerId, @parentSPPParentId, @ValidFrom, @ValidTo  ;

        IF (SELECT COUNT(*) FROM dbo.CarmakerPartnership WHERE ServiceProviderId = @parentSPPId AND CarmakerId = @CarmakerId AND IsDeleted = 0) = 0
        BEGIN                           
            INSERT INTO dbo.CarmakerPartnership (CarmakerId, ServiceProviderId, CreatedBy, ChangedBy, ValidityPeriodFrom, ValidityPeriodTo) VALUES (@CarmakerId, @parentSPPId, SYSTEM_USER, SYSTEM_USER, @ValidFrom, @ValidTo)
        END             
    END 
    FETCH NEXT FROM ServiceProviderParent_Cursor INTO @parentSPPId, @parentSPPParentId 
END;
    CLOSE ServiceProviderParent_Cursor;
    DEALLOCATE ServiceProviderParent_Cursor;
END

Спасибо за вашу помощь и извините за мой плохой английский!

С уважением.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2011

В любом случае, используйте следующий код для заполнения переменной:

DECLARE @ParentServiceProviderId int

SELECT @ParentServiceProviderId = ParentServiceProviderId 
FROM ServiceProvider
WHERE ServiceProviderId = @ServiceProviderId
0 голосов
/ 10 февраля 2011

не присваивайте значение по умолчанию этой переменной, а остальной код:

DECLARE @ParentServiceProviderId int

SELECT @ParentServiceProviderId = ParentServiceProviderId 
                                FROM ServiceProvider
                                WHERE ServiceProviderId = @ServiceProviderId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...