sql多案例声明

时间:2011-08-19 15:15:45

标签: sql

您好我正在尝试编写多个案例陈述来预设作业的优先级。有一些表和ID涉及到这一点,但基本上我想检查作业是否存在如果它与它相关的问题是80然后有多个案例状态,以便如果作业次要类别是1然后答案将是High的ID。到目前为止我所做的代码可以解释得更好......

 ALTER Procedure [dbo].[usp_CreatePresetPriority]
   @HelpdeskID int,
   @MinorCategoryID int
 As
 BEGIN

IF EXISTS(SELECT * FROM TicketInformation WHERE TicketID = @HelpdeskID AND QuestionID = 80)
    BEGIN
        UPDATE TicketInformation
        SET AnswerInput = Null, 
            AnswerID = CASE @MinorCategoryID WHEN 87 THEN 129 END
        WHERE TicketID = @HelpdeskID And QuestionID = 80

    END

ELSE
    BEGIN
        INSERT INTO TicketInformation (TicketID, QuestionID, AnswerID, AnswerInput)
        VALUES (@HelpdeskID, 80, CASE @MinorCategoryID WHEN 87 THEN 129 END, Null)
    END

所以这可行,但仅适用于一个选项 - 其中@MinorCategoryID = 87我希望有多于1个语句设置@MinorCategoryID,而91THEN 130等...

我试过......

    IF EXISTS(SELECT * FROM TicketInformation WHERE TicketID = @HelpdeskID AND QuestionID = 80)
 UPDATE TicketInformation SET AnswerInput = Null, AnswerID = CASE @MinorCategoryID WHEN 87 THEN 129 WHERE TicketID = @HelpdeskID And QuestionID = 80
ELSE INSERT INTO TicketInformation (TicketID, QuestionID, AnswerID, AnswerInput) VALUES (@HelpdeskID, 80, CASE @MinorCategoryID WHEN 87 THEN 129 END, Null)



     IF EXISTS(SELECT * FROM TicketInformation WHERE TicketID = @HelpdeskID AND QuestionID = 80)
 UPDATE TicketInformation SET AnswerInput = Null, AnswerID = CASE @MinorCategoryID WHEN 91 THEN 130 WHERE TicketID = @HelpdeskID And QuestionID = 80
ELSE INSERT INTO TicketInformation (TicketID, QuestionID, AnswerID, AnswerInput) VALUES (@HelpdeskID, 80, CASE @MinorCategoryID WHEN 91 THEN 130 END, Null)

任何帮助表示赞赏 - 抱歉,如果不清楚我有一个星期五的模糊头!

3 个答案:

答案 0 :(得分:13)

您可以将其分配给变量,然后只需插入变量。

ELSE
    BEGIN

        SELECT @MinorCategoryID = CASE
               WHEN @MinorCategoryID = 87 THEN 129
               WHEN @MinorCategoryID = 91 THEN 130
            -- more cases here
            ELSE NULL 
        END
        INSERT INTO TicketInformation (TicketID, QuestionID, AnswerID, AnswerInput)
        VALUES (@HelpdeskID, 80, @MinorCategoryID, Null)
    END

或通过选择

更改值()
ELSE
    BEGIN                
        INSERT TicketInformation (TicketID, QuestionID, AnswerID, AnswerInput)
        SELECT @HelpdeskID, 
               80, 
               CASE 
                   WHEN @MinorCategoryID = 87 THEN 129
                   WHEN @MinorCategoryID = 91 THEN 130
                   -- more cases here
                   ELSE NULL 
                END, 
                Null
    END

答案 1 :(得分:0)

尝试一下:

CASE WHEN @MinorCategoryID = 87 THEN 129 ELSE NULL END

显然,如果需要,用另一个值替换ELSE情况中的NULL。

答案 2 :(得分:0)

尝试为这些可能的方案创建列表。因此,当弹出新案例时,您只需更新该表即可。

这是代码

if(OBJECT_ID('_MinorCategoryList') > 0)
    drop table _MinorCategoryList

create table _MinorCategoryList(
id int identity(1,1),
[when] int,
[then] int
)

insert into _MinorCategoryList ([when],[then])
values (87,129),(91,130)

select * from _MinorCategoryList

go

alter Procedure [dbo].[usp_CreatePresetPriority]
   @HelpdeskID int,
   @MinorCategoryID int
 As
 BEGIN

IF EXISTS(SELECT * FROM TicketInformation WHERE TicketID = @HelpdeskID AND QuestionID = 80)
    BEGIN
        UPDATE TicketInformation
        SET AnswerInput = Null, 
            AnswerID = (SELECT [then] FROM _MinorCategoryList WHERE [when] = @MinorCategoryID)
        WHERE TicketID = @HelpdeskID And QuestionID = 80

    END

ELSE
    BEGIN
        INSERT INTO TicketInformation (TicketID, QuestionID, AnswerID, AnswerInput)
        VALUES (@HelpdeskID, 80, (SELECT [then] FROM _MinorCategoryList WHERE [when] = @MinorCategoryID), Null)
    END
END

go