“列前缀'*'与查询中使用的表名或别名不匹配。”使用临时表时

时间:2014-10-13 18:57:29

标签: sql-server stored-procedures sql-update sql-server-2000 temp-tables

在SQL Server 2000存储过程中,我正在尝试对表变量执行更新语句。它目前给出了错误:“列前缀'WST'与查询中使用的表名或别名不匹配。”

UPDATE WST
SET
    WST.QtySold = (SELECT SUM(II.QtyShipped)
    FROM #InvoiceItems II
        WHERE II.InvoiceDate >= WST.StartDate
            AND II.InvoiceDate <= WST.EndDate),
    WST.TotalSales = (SELECT SUM(ISNULL(II.QtyShipped, 0) * ISNULL(II.UnitPrice, 0))
        FROM #InvoiceItems II
        WHERE II.InvoiceDate >= WST.StartDate
            AND II.InvoiceDate <= WST.EndDate),
    WST.TotalCost = (SELECT SUM(ISNULL(II.QtyShipped, 0) * ISNULL(II.UnitCost, 0))
        FROM #InvoiceItems II
        WHERE II.InvoiceDate >= WST.StartDate
            AND II.InvoiceDate <= WST.EndDate)
FROM @WeeklySalesTrend WST
WHERE WST.WeekNo = 1

此错误仅在我创建临时表#InvoiceItems并使用临时表替换两个表的内部联接后才出现。为什么更改临时表的双表内连接会导致此错误,如何修复/绕过它?

2 个答案:

答案 0 :(得分:0)

我没有SQL 2000框来测试它,但我认为您的查询语法是正确的。我怀疑可能有隐形控制字符搞乱了解析。这曾经不时发生,但我暂时没有看到这个问题。尝试从头开始将查询键入新的查询窗口。

答案 1 :(得分:0)

答案归结为此,SQL查询分析器给出了错误的错误位置。该错误实际上是因为我在尝试使用WST的代码中有一个高出17行的Insert语句,当时我从来没有将其混淆。我不知道这是查询分析器方面的故障/错误,还是存储过程针对更多线路进行了优化,并且其位置已关闭。无论哪种方式,问题都得到了解决。感谢您的建议和快速回复,并抱歉浪费您的时间。