0

我有一个通过 MS Query 连接到 Excel 的 SQL 查询,其中包括一个临时表。

代码:

CREATE TABLE #PV (ProductID varchar(255), Price int);

INSERT INTO #PV(ProductID, Price)
   SELECT DISTINCT 
      PLR.ProductID, MAX(PLR.normal_price)
   FROM 
      dbo.t_price_lists_r AS PLR 
   WHERE 
      PLR.price_list = 1115
   GROUP BY 
      PLR.ProductID

SELECT P.ProductID, P.Price 
FROM #PV AS P

BEGIN DROP TABLE #PV END

该代码在 SSMS 中运行良好并返回正确的结果,但在 Excel/MS Query 中运行它时出现三个不同的错误,如下所示:

  1. Invalid column name 'ProductId'

  2. Deferred prepare could not be completed

  3. Statement(s) could not be prepared

通常,我每天都通过 Excel 运行 SQL 查询而不会发生意外。

提前谢谢了!

4

2 回答 2

0

每当进行故障排除时,它通常有助于从有效的方法开始并不断添加东西直到它坏掉。所以尝试运行这些,它会告诉你什么不起作用。

1

CREATE TABLE #PV (ProductID varchar(255), Price int);
GO
SELECT P.ProductID, P.Price 
FROM #PV AS P;
GO
BEGIN DROP TABLE #PV END

2

CREATE TABLE #PV (ProductID varchar(255), Price int);
GO
INSERT INTO #PV(ProductID, Price)
    SELECT 'Test',1;
GO
SELECT P.ProductID, P.Price 
FROM #PV AS P;
GO
BEGIN DROP TABLE #PV END

3

CREATE TABLE #PV (ProductID varchar(255), Price int);
GO
INSERT INTO #PV(ProductID, Price)
  SELECT DISTINCT PLR.ProductID, MAX(PLR.normal_price)
FROM 
      dbo.t_price_lists_r AS PLR 
WHERE 
      PLR.price_list = 1115
   GROUP BY 
      PLR.ProductID
GO
SELECT P.ProductID, P.Price 
FROM #PV AS P;
GO
BEGIN DROP TABLE #PV END
于 2015-03-12T18:53:12.170 回答
0

我发现通过在 SQL 开头添加“SET NOCOUNT ON”,Excel 的 MS Query 可以容纳临时表。

感谢所有评论。

于 2016-05-20T08:15:31.917 回答