首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >别名,以防sqlserver

别名,以防sqlserver
EN

Stack Overflow用户
提问于 2018-10-17 10:11:29
回答 1查看 34关注 0票数 0

我编写了一个触发器将状态从OrderDetails状态更新为Order:

代码语言:javascript
运行
复制
BEGIN
    /* 
        Order Status:
            Pending = 0,
            Processing = 1,
            Proceeded = 2,
            Completed = 3,
            Cancelled = 4,
        Order Detail Status:
            Pending = 0,
            Processing = 1,
            Proceeded = 2,
            Emailed = 3,
            Ordered = 4,
            Cancelled = 5
    */
    IF (UPDATE([Status]))
    BEGIN   
        UPDATE [Order]
        SET [Status] = 
            CASE (SELECT MIN(od.[Status]) FROM OrderDetail od WHERE od.OrderId = i.OrderId)
                WHEN 5 THEN 4
                WHEN 4 THEN 3
                WHEN 3 THEN 2
                WHEN 2 THEN 2
                WHEN 1 THEN 1
                WHEN 0 THEN 0
            END
        FROM INSERTED i
        WHERE [Order].Id = i.OrderId
    END
END

您可以看到,当OrderDetailStatus =2或3然后OrderStatus = 2,否则OrderStatus = OrderDetailStatus。现在,我必须列出状态的值。那么,是否可以为value语句创建别名,如:

代码语言:javascript
运行
复制
SET [Status] = 
            CASE (SELECT MIN(od.[Status]) FROM OrderDetail od WHERE od.OrderId = i.OrderId) AS val
                WHEN 3 THEN 2
                ELSE val
            END
        FROM INSERTED i
        WHERE [Order].Id = i.OrderId
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-17 10:20:04

我唯一能想到的“缩短”办法是:

代码语言:javascript
运行
复制
UPDATE O
SET [Status] = CASE WHEN od.[Status] BETWEEN 3 AND 5 THEN od.[Status] - 1 ELSE od.[Status] END
FROM [Order] O
     JOIN INSERTED i ON O.Id = i.OrderId
     CROSS APPLY (SELECT MIN(od.[Status]) AS [Status]
                  FROM OrderDetail ca
                  WHERE ca.OrderId = i.OrderId) od;

另外,您应该避免在对象名称中使用保留的(甚至键)单词。ORDER是Server中的保留字,因此实际上不应该使用。Status是一个关键词,所以可以,但也应该避免。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52852371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档