SQL IF ELSE与输出参数存储proc帮助

时间:2010-04-22 15:18:03

标签: sql stored-procedures insert

我有一个存储过程(SS2008)需要一些int id,如果它们在添加记录之前存在于表中,则需要查找它们。我有一个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

结束尝试

我错过了什么?感谢您的任何提示。

干杯, 〜在圣地亚哥

2 个答案:

答案 0 :(得分:3)

将最后一个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

答案 1 :(得分:0)

您是否尝试使用SELECT @result而不是SET?另外,我假设调用代码的@result参数标记为Output?