Tsql 将临时表值转换为表值UDF

Tsql 将临时表值转换为表值UDF,tsql,sql-server-2005,Tsql,Sql Server 2005,我在使用SQL2K存储过程时遇到了一些问题,我们将其迁移到了SQL2K5,以便可以使用表值UDF而不是标量UDF 这很简单,但这是我的问题 我有一个临时表格,里面有产品信息。然后,我将该产品信息传递到UDF中,并将信息返回到我的主要结果集。它似乎不起作用 不允许我将临时表值传递到交叉应用的表值UDF中吗 --CREATE AND FILL #brandInfo SELECT sku, upc, prd_id, cp.customerPrice FROM products p JOI

我在使用SQL2K存储过程时遇到了一些问题,我们将其迁移到了SQL2K5,以便可以使用表值UDF而不是标量UDF

这很简单,但这是我的问题

我有一个临时表格,里面有产品信息。然后,我将该产品信息传递到UDF中,并将信息返回到我的主要结果集。它似乎不起作用

不允许我将临时表值传递到交叉应用的表值UDF中吗

--CREATE AND FILL #brandInfo

SELECT sku, upc, prd_id, cp.customerPrice
  FROM products p
    JOIN #brandInfo b ON p.brd_id=b.brd_id
    CROSS APPLY f_GetCustomerPrice(b.priceAdjustmentValue, b.priceAdjustmentAmount, p.Price)  cp

--f_GetCUstomerPrice uses the AdjValue, AdjAmount, and Price to calculate users actual price
当我为b.priceAdjustmentValue和b.priceAdjustmentAmount输入虚拟值时,效果非常好。但一旦我尝试加载临时表中的值,它就会爆炸

Msg 207, Level 16, State 1, Line 140
Invalid column name 'b.priceAdjustmentValue'.
Msg 207, Level 16, State 1, Line 140
Invalid column name 'b.priceAdjustmentAmount'.
您是否尝试过:

--CREATE AND FILL #brandInfo

SELECT sku, upc, prd_id, cp.customerPrice
  FROM products p
    JOIN #brandInfo b ON p.brd_id=b.brd_id
    CROSS APPLY (
        SELECT *
          FROM f_GetCustomerPrice(b.priceAdjustmentValue, b.priceAdjustmentAmount, p.Price)  cp
    )

--f_GetCUstomerPrice uses the AdjValue, AdjAmount, and Price to calculate users actual price
为UDF提供适当的上下文以解析列引用

编辑:

我在本地Northwind 2005数据库中构建了以下UDF:

CREATE FUNCTION dbo.f_GetCustomerPrice(@adjVal DECIMAL(28,9), @adjAmt DECIMAL(28,9), @price DECIMAL(28,9))
RETURNS TABLE
AS RETURN
(
    SELECT Level = 'One', AdjustValue = @adjVal, AdjustAmount = @adjAmt, Price = @price
    UNION
    SELECT Level = 'Two', AdjustValue = 2 * @adjVal, AdjustAmount = 2 * @adjAmt, Price = 2 * @price
)
GO
并在以下查询中引用了它,没有问题:

SELECT p.ProductID,
       p.ProductName,
       b.CompanyName,
       f.Level
FROM   Products p
       JOIN Suppliers b
           ON p.SupplierID = b.SupplierID
       CROSS APPLY dbo.f_GetCustomerPrice(p.UnitsInStock, p.ReorderLevel, p.UnitPrice) f

您确定您对#brandInfo的定义中定义了priceAdjustmentValue和priceAdjustmentAmount列吗?更重要的是,如果您像前面提到的那样将其放在存储过程中,是否已经存在一个没有定义这些列的#brandInfo表?我知道#brandInfo是一个临时表,但是如果它在您尝试创建存储过程时存在,并且没有列,那么解析引擎可能会出错。奇怪的是,如果该表根本不存在,解析引擎只需滑过丢失的表,然后为您创建SP。

这不起作用,仍然会得到完全相同的错误。