SQL查询中的临时表通过Excel / MS查询的问题

时间:2015-03-12 12:10:25

标签: excel tsql temp-tables ms-query

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

代码:

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

  4. 我每天都通过Excel运行SQL查询而不会发生任何事故。

    非常感谢提前!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

感谢所有评论。