我有一个存储过程(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
结束尝试
我错过了什么?感谢您的任何提示。
干杯, 〜在圣地亚哥
答案 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?