并行数据仓库(PDW)功能未启用

时间:2013-02-07 13:38:14

标签: sql sql-server

我有一个WinForms客户端应用程序,它使用参数执行以下SQL语句。

SELECT a.CaseNo, (c.Claimant + ' -v- ' + c.Defendant) AS CaseName, 
       a.Allocation - ISNULL(LAG(a.Allocation) 
       OVER (PARTITION BY a.CaseNo, a.FeeEarner ORDER BY a.AllocID), 0) AS Billing, a.AllocID 
FROM tblAllocations AS a INNER JOIN tblCases AS c ON a.CaseNo = c.CaseNo
WHERE a.CaseNo > 0 AND FeeEarner = @FeeEarner 
AND a.Date >= @StartDate 
AND a.Date <= @EndDate ORDER BY a.Date;

当我在笔记本电脑上运行此操作时,我会进行开发工作,查询执行时没有任何问题。返回的信息用于填充客户端应用程序中的数据网格。我正在使用SQL Server 2012 Express。

但是,当在我的客户所在地运行完全相同的客户端应用程序时,代码会返回错误。大多数错误消息是由我的应用程序生成的,这使我能够确定问题出现在代码中的哪个位置。但是,在我附加系统生成错误的消息的末尾,我得到以下内容:

The parallel data warehouse (PDW) features are not enabled

我之前从未见过这条消息,因此无法确定问题所在。我尝试过谷歌搜索此错误消息,但没有找到任何有用的信息。我的客户正在使用SQL Server 2008 R2 Express。

PDW是SQL Express 2012中不属于2008 R2版本的功能吗?

我的查询是什么需要PDW?

是否使用了PARTITION,因为这是一个我之前没有用过的关键字,直到导致问题的查询?

没有让客户更改他们的SQL版本是否有任何方法可以解决此问题,例如通过更改我的SQL查询,或在SQL中启用某些东西?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

仅在SQL Server 2012中支持LAG命令。

如果这是问题,我会对错误感到惊讶。

- 编辑 -

在不使用LAG的情况下复制您的查询:

这基本上取决于我提到的article;

SELECT 
       a.CaseNo, 
       (c.Claimant + ' -v- ' + c.Defendant) AS CaseName, 
       a.Allocation - ISNULL((
           CASE 
              WHEN N%2=1 
              THEN MAX(CASE 
                   WHEN N%2=0 
                   THEN a.Allocation 
                   END) 
              OVER (Partition BY N/2) 
              ELSE MAX(CASE 
                   WHEN N%2=1 
                   THEN a.Allocation
                   END) 
              OVER (Partition BY (N+1)/2) 
           END
       ), 0) AS Billing, 
       a.AllocID 
FROM tblAllocations AS a
LEFT JOIN (SELECT 
    Row_Number() OVER(ORDER BY b.Id) N,
    b.Id
  FROM tblAllocations as b) AS RowNum 
ON RowNum.id=a.id 
INNER JOIN tblCases AS c 
ON a.CaseNo = c.CaseNo
WHERE a.CaseNo > 0 
AND FeeEarner = @FeeEarner 
AND a.Date >= @StartDate 
AND a.Date <= @EndDate 
ORDER BY a.Date;

以下是演示:

SQL FIDDLE