5

パラメータを使用して次のSQLステートメントを実行するWinFormsクライアントアプリケーションがあります。

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 Server2012Expressを使用しています。

ただし、まったく同じクライアントアプリケーションを顧客の施設で実行すると、コードはエラーを返します。エラーメッセージの大部分はアプリケーションによって生成されます。これにより、コード内のどこで問題が発生したかを特定できます。ただし、システムで生成されたエラーを追加するメッセージの最後に、次のメッセージが表示されます。

The parallel data warehouse (PDW) features are not enabled

私はこれまでこのメッセージを見たことがないので、問題が何であるかを判断するのに途方に暮れています。このエラーメッセージをGoogleで検索してみましたが、有用なものは見つかりませんでした。私の顧客はSQLServer2008R2Expressを使用しています。

PDWは、2008R2バージョンにはないSQLExpress 2012の機能ですか?

PDWを必要とする私のクエリについてはどうですか?

問題を引き起こしているのは、このクエリまで以前に使用していなかったキーワードであるため、PARTITIONの使用ですか?

顧客にSQLバージョンを変更させることなく、SQLクエリを変更したり、SQLで何かを有効にしたりするなど、この問題に対処する方法はありますか?

どんな助けでも大歓迎です。

4

2 に答える 2

4

このコマンドLAGは、SQLServer2012でのみサポートされています。

これが問題だとしたらエラーに驚いていますが。

- 編集 -

を使用せずにクエリを複製するにはLAG

これは基本的に私が言及した記事から削除されました。

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フィドル

于 2013-02-07T13:48:51.713 に答える
0

同じ問題が発生しました。「Partitionby」の後にある「ORDERBY」を削除して解決しました。

SELECT MAX(FechaActualizacion) OVER (Partition BY YEAR(FechaActualizacion), MONTH(FechaActualizacion), CampoEspecial, NumeroEspecial, TipoCampoEspecial) as FechaMax
于 2021-09-07T13:55:56.503 に答える