【问题标题】:Issues with Temporary Tables in SQL query via Excel / MS Query通过 Excel/MS 查询的 SQL 查询中的临时表问题
【发布时间】:2015-03-12 12:10:24
【问题描述】:

我有一个通过 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 查询而不会发生意外。

非常感谢!

【问题讨论】:

  • 好的,我无法在我的机器上轻松复制您的示例,但首先我会尝试在所有标识符(表、列等)中添加括号以防万一。然后,如果这不起作用,则将其分解。首先使用一列运行 select 语句。然后添加 where 子句,然后添加 group 子句和其他列。然后插入,然后从 temp 中选择。分解它并不断添加东西,直到它破坏,这应该有助于查明您的问题
  • 谢谢斯蒂芬,但我已经尝试过了,问题仍然存在。
  • 你试过摆脱“DISTINCT”吗?

标签: excel tsql temp-tables ms-query


【解决方案1】:

无论何时进行故障排除,通常都有助于从可行的方法开始,然后不断添加内容,直到出现问题。所以尝试运行这些,它会告诉你什么不起作用。

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

【讨论】:

  • 感谢各位大侠的反馈,也许我说的不是特别好,但我知道SQL是正确的。我的问题是为什么它在 SSMS 中有效但在 MS Query 中无效?如果有原因,我该如何解决?谢谢!
【解决方案2】:

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

感谢所有评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 2013-02-07
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多