Функции параллельного хранилища данных (PDW) не включены

У меня есть клиентское приложение 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;

Когда я запускаю это на своем ноутбуке, где выполняю свою работу по разработке, запрос выполняется без проблем. Возвращенная информация используется для заполнения datagrid в клиентском приложении. Я использую SQL Server 2012 Express.

Однако, когда то же самое клиентское приложение выполняется в помещении моего клиента, код возвращает ошибку. Большинство сообщений об ошибке генерируется моим приложением, которое просто позволяет мне определить, где в коде возникает проблема. Однако в конце сообщения, где я добавляю системную ошибку, я получаю следующее:

The parallel data warehouse (PDW) features are not enabled

Я никогда не видел этого сообщения раньше и поэтому не могу понять, в чем проблема. Я попробовал Google искать это сообщение об ошибке, но ничего не нашел. Мой клиент использует SQL Server 2008 R2 Express.

Является ли PDW функцией в SQL Express 2012, которая не входит в версию 2008 R2?

Что касается моего запроса, который требует PDW?

Является ли использование PARTITION, потому что это ключевое слово, которое я ранее не использовал до этого запроса, который вызывает проблемы?

Без того, чтобы клиент мог изменить свою SQL-версию, есть ли способ решить эту проблему, например. путем изменения моего SQL-запроса или включения чего-либо в SQL?

Любая помощь будет оценена по достоинству.

4
nl ja de

1 ответы

Команда LAG поддерживается только в SQL Сервер 2012.

Хотя я удивлен ошибкой, если это проблема.

--Редактировать--

Чтобы реплицировать запрос без использования 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 FIDDLE

3
добавлено
Можно ли пересмотреть запрос, чтобы избежать этой проблемы, но вернуть те же данные?
добавлено автор PJW, источник
Хм - я попробовал свой код, и я получил сообщение об ошибке, что команда ISNULL требует два аргумента. Но это странно, потому что 0 входит в ваш код и является вторым аргументом. Есть идеи?
добавлено автор PJW, источник
Я думаю, что у нас сейчас отсутствует тесная скобка, потому что '(' перед SELECT никогда не закрывается, но я не знаю, где это должно произойти.
добавлено автор PJW, источник
Недопустимое имя столбца 'N'
добавлено автор PJW, источник
Я отметил как ответ, потому что это определенно поставило меня в правильном направлении, я думаю - спасибо.
добавлено автор PJW, источник
@PJW: PDW - это совсем другой продукт. Он не поддерживает те же функции, что и SQL Server. LAG - один из примеров, но есть много особенностей SQL Server, которые PDW не поддерживает, например, вы не можете использовать RAISEERROR внутри хранимой процедуры. PDW: microsoft.com/en- нас/SQLServer/решения-технологии/& hellip;
добавлено автор Icarus, источник
Это Статья может помочь
добавлено автор DMK, источник
Я сделал редактирование движущегося столбца «N» в left join , который должен решить проблему. Он работает в этой демо-версии Sql Fiddle в любом случае :)
добавлено автор DMK, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)