【问题标题】:sql The multi-part identifier could not be bound sql serversql 多部分标识符无法绑定 sql server
【发布时间】:2022-11-19 10:47:55
【问题描述】:

我在执行“The multi-part identifier “od.Ordernumber” could not be bounds”时遇到错误 “多部分标识符“od.Location_code”不能被限制”

create function Mbse.udf_ordertotal
(@Numberoforder int , @loction_code int )
returns int 
as
begin

declare @amount as int 

set @amount=(select  sum(od.amount) from Mbse.OrderDetails as od 
where (@Numberoforder=od.Ordernumber and @loction_code=od.Location_code) 
)
return @amount
end

alter table Mbse.orders
add amount as Mbse.udf_ordertotal(Mbse.OrderDetails.Ordernumber , Mbse.OrderDetails.location_code)

我希望解决这个问题

【问题讨论】:

  • Mbse.OrderDetails表结构是什么样的?您确定列名正确吗?
  • 这不能按照您尝试的方式完成 - 您不能从 Orders 表的计算列中引用 OrderDetails 表。看起来您正在尝试根据订单的订单项目(详细信息)为订单创建总金额列。这是一个非常糟糕的主意......

标签: mysql sql sql-server database


【解决方案1】:

正如 Jeff 在 cmets 中所说,出于多种原因,您的计算列使用用户定义的函数来聚合 Mbse.OrderDetails 表并不是一个好主意。它会很重,将每行处理一次 RBAR(逐行处理),并将 prevent parallelism 直接或间接引用该函数或您的 Mbse.orders 表的任何查询。

你最好在你的OrderDetails 表上建立适当的索引,并将它连接到你的Orders 表,如下所示:

-- Columnstore indexes are typically very quick for aggregative queries
CREATE NONCLUSTERED COLUMNSTORE INDEX IX_OrderDetails_Amount ON Mbse.OrderDetails (Ordernumber, Location_code, amount);

CREATE VIEW Mbse.OrdersWithTotals 
AS

WITH _OrderDetailsTotals AS
(
    SELECT
        Ordernumber, 
        Location_code, 
        SUM(amount) AS TotalAmount
    FROM Msbe.OrderDetails
    GROUP BY 
        Ordernumber, 
        Location_code
)

SELECT
    O.Ordernumber,
    O.location_code,
    ODT.TotalAmount
FROM Mbse.orders AS O
LEFT JOIN _OrderDetailsTotals AS ODT
    ON O.Ordernumber = ODT.Ordernumber
    AND O.location_code = ODT.Location_code;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2013-06-23
    • 2019-01-26
    • 1970-01-01
    相关资源
    最近更新 更多