SQL IF ELSE с сохраненными выходными параметрами - PullRequest
0 голосов
/ 22 апреля 2010

У меня есть сохраненный процесс (SS2008), который принимает пару идентификаторов и должен искать их в таблице, прежде чем добавлять запись. У меня есть int выходной параметр, который я хотел бы вернуть и установить его значение в зависимости от того, что произошло. У меня пока что есть, но всегда возвращается 1. Может ли кто-нибудь указать мне правильное направление?

BEGIN TRY

IF EXISTS
(
    SELECT * FROM tbMap WHERE (cId= @CId)
)
    SET @result = -1; -- This C User is already mapped

ELSE IF EXISTS
(
    SELECT * FROM tbMap WHERE (dId = @DId)

)

    SET @result = -2; -- This D User is already mapped

ELSE
    INSERT INTO tbMap (
        Login
        , Email
        , UserName
        , CId
        , DId)
    SELECT 
            @UserName
            , usr.EmailAddress
            , usr.UserName
            , @CId
            , @DId
        FROM tbUser usr WHERE usr.iUserID = @DId

    SET @result = 1;
RETURN

END TRY

Чего мне не хватает? Спасибо за любые советы.

Ура, ~ ck в Сан-Диего

Ответы [ 2 ]

3 голосов
/ 22 апреля 2010

Поместите несколько операторов для последнего ELSE в блок BEGIN / END, в противном случае всегда выполняется последний SET.

ELSE
BEGIN
    INSERT INTO tbMap (
        Login
        , Email
        , UserName
        , CId
        , DId)
    SELECT 
            @UserName
            , usr.EmailAddress
            , usr.UserName
            , @CId
            , @DId
        FROM tbUser usr WHERE usr.iUserID = @DId

    SET @result = 1;
    RETURN
END
END TRY
0 голосов
/ 22 апреля 2010

Вы пытались использовать SELECT @result вместо SET? Кроме того, я предполагаю, что вызывающий код имеет параметр @result, помеченный как Output?

...