我有一个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中启用某些东西?
非常感谢任何帮助。
答案 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;
以下是演示: