【问题标题】:Need help with SQL join to a function需要有关 SQL 连接到函数的帮助
【发布时间】:2009-12-11 03:22:22
【问题描述】:

我正在尝试将以下内容输入到 QuoteItem 的 UPDATE 触发器中:

UPDATE QuoteItem
SET List = StyleItem.List, CostFactor = StyleItem.CostFactor, Cost = NULL
FROM dbo.fn_GetQuoteItemListPrice(QuoteItem.ItemId, QuoteItem.RoomId) 
    AS StyleItem
CROSS JOIN (QuoteItem JOIN INSERTED ON 
    QuoteItem.QuoteItemId = INSERTED.QuoteItemId)
WHERE (INSERTED.List IS NULL) AND (INSERTED.ItemId IS NOT NULL)

我得到以下错误:

Msg 4104, Level 16, State 1, Procedure QuoteItem_UPDATE, Line 6
The multi-part identifier "QuoteItem.ItemId" could not be bound.
Msg 4104, Level 16, State 1, Procedure QuoteItem_UPDATE, Line 6
The multi-part identifier "QuoteItem.RoomId" could not be bound.

【问题讨论】:

    标签: sql-server triggers user-defined-functions


    【解决方案1】:
    UPDATE QuoteItem
    SET List = StyleItem.List, CostFactor = StyleItem.CostFactor, Cost = NULL
    FROM dbo.fn_GetQuoteItemListPrice(xx.ItemId, xx.RoomId) 
        AS StyleItem
    CROSS JOIN (QuoteItem JOIN INSERTED ON 
        QuoteItem.QuoteItemId = INSERTED.QuoteItemId)  xx
    WHERE (INSERTED.List IS NULL) AND (INSERTED.ItemId IS NOT NULL)
    

    尝试我在上面所做的更改,分配一个表别名 xx 并引用它..

    【讨论】:

    • Msg 102,级别 15,状态 1,过程 QuoteItem_UPDATE,第 13 行 'xx' 附近的语法不正确。
    • 对不起,我没有打开 SQL,但是尝试在 xx 之后添加 ON 1=1
    • 另外,为什么需要交叉连接,不能直接从INSERTED表中引用ItemID和RoomId吗?
    • 因为你可以看到它是一个多值 udf,即返回表
    • 和我需要的交叉连接因为我想更新 QuoteItem 的受影响行 - 无法更新 INSERTED 表。而且你可以猜到这个函数也会做一些计算,那就是我需要这种方式
    【解决方案2】:

    答案由 Naomi Nosonovsky 找到 here

    UPDATE QuoteItem
    SET List = StyleItem.List, CostFactor = StyleItem.CostFactor, Cost = NULL
    FROM QuoteItem JOIN INSERTED AS INSERTED ON QuoteItem.QuoteItemId =
        INSERTED.QuoteItemId
        CROSS APPLY dbo.fn_GetQuoteItemListPrice(QuoteItem.ItemId, QuoteItem.RoomId)
            AS StyleItem 
    WHERE (INSERTED.List IS NULL) AND (INSERTED.ItemId IS NOT NULL)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      相关资源
      最近更新 更多