2012-01-19 2 views
2

Работа с запросом в SSRS 2005. Запрос работает в представлении «Данные», но в предварительном просмотре он взрывается. Это то, что у меня есть:SSRS дает мне ошибку, но работает в режиме просмотра данных

SELECT 
     TOP(cast(@N as integer)) 
     Date, 
     StartItem, 
     MasterItem, 
     SubItem, 
     SubItemDescription, 
     Quantity, 
     NetQuantity, 
     UnitOfMeasure, 
     BomLevel, 
     Cost, 
     Cost * NetQuantity * (CASE WHEN a.Purch = 1 THEN 1 ELSE 0 END) AS TotalSumCost 
FROM   
     Bom AS a 
GROUP BY 
     Date, StartItem, MasterItem, SubItem, SubItemDescription, Quantity, NetQuantity,  UnitOfMeasure, BomLevel, Cost, 
         Cost * NetQuantity * (CASE WHEN a.Purch = 1 THEN 1 ELSE 0 END) 
ORDER BY TotalSumCost DESC 

Ошибки я получаю «значение выражения для параметра запроса„@N“относится к несуществующему параметру отчета„N“Я установка N в моем параметре отчетов. см. рисунок ниже.

enter image description here

ответ

5

вы должны назвать это N, я вижу RowsReturned.

Кроме того, если вы определили, что параметр позже в процессе есть случаи, особенно в 03 и 05 (визуальные Studio), где этот параметр не выбран. Щелкните правой кнопкой мыши свой отчет и выберите «Просмотреть код» в XML, найдите раздел параметров и убедитесь, что он есть. Он будет выглядеть следующим образом:

<Query> 
     <DataSourceName>dsTKExpenseReports</DataSourceName> 
     <CommandType>StoredProcedure</CommandType> 
     <CommandText>rptExpenseReportReasons</CommandText> 
     <QueryParameters> 
      <QueryParameter Name="@ExpenseReasonID"> 
      <Value>=Parameters!ExpenseReasonID.Value</Value> 
      </QueryParameter> 
      <QueryParameter Name="@Reimbursable"> 
      <Value>=Parameters!Reimbursable.Value</Value> 
      </QueryParameter> 
      <QueryParameter Name="@RequiresDesc"> 
      <Value>=Parameters!RequiresDesc.Value</Value> 
      </QueryParameter> 
     </QueryParameters> 
     </Query> 

Обратите внимание на раздел параметров запроса, убедитесь, что ваш имеет как товар и RowsReturned. И измените либо имя параметра на «N», либо измените свой SQL или сохраненную процедуру на значение «RowsReturned». Они всегда должны совпадать. Ваш код должен выглядеть следующим образом:

SELECT 
     TOP(cast(@RowsReturned as integer)) 
     Date, 
     StartItem, 
     MasterItem, 
     SubItem, 
     SubItemDescription, 
     Quantity, 
     NetQuantity, 
     UnitOfMeasure, 
     BomLevel, 
     Cost, 
     Cost * NetQuantity * (CASE WHEN a.Purch = 1 THEN 1 ELSE 0 END) AS TotalSumCost 
FROM   
     Bom AS a 
GROUP BY 
     Date, StartItem, MasterItem, SubItem, SubItemDescription, Quantity, NetQuantity,  UnitOfMeasure, BomLevel, Cost, 
         Cost * NetQuantity * (CASE WHEN a.Purch = 1 THEN 1 ELSE 0 END) 
ORDER BY TotalSumCost DESC 

BTW вы неправильно используя предложение GROUP BY, вы просто список всех ваших столбцов в группе, чтобы получить ожидаемые результаты. Это может укусить вас по дороге. Правильным способом будет запрос с псевдонимом, а затем группа внутри псевдонима ...

SELECT 
     n.Blah, 
     a.Blah 
FROM 
     MyTable 
INNER JOIN 
(
    SELECT...GROUP BY... 
) n 
Смежные вопросы