Как хранимая процедура может не возвращать строки при вызове из BIDS, но возвращать строки при вызове из SSMS при использовании того же параметра? - PullRequest
0 голосов
/ 13 сентября 2011

Использование SSRS 2008R2 с базой данных SQL Server 2005 для источника данных.

У меня есть отчет (RDL-файл), встроенный в Business Intelligence Development Studio (VS 2008). Он использует хранимую процедуру в качестве источника данных. Процесс принимает один параметр, INT, который является уникальным ключом для главной таблицы в одном из SELECT в процедуре.

Для некоторых значений параметров выполнение proc из конструктора запросов BIDS не возвращает строк. Выполнение такой же процедуры из SSMS с использованием того же значения параметра возвращает строки. Профилировщик показывает один и тот же SELECT независимо от того, сделан ли вызов из BIDS или SSMS. Как они могли получить разные результаты?

Вот проц:

CREATE PROCEDURE [Report_BatchEdit]
    @BatchAltId INT
AS
   SELECT   b.[BatchAltId]
            , fs.[Name] AS [FundingSource]
            , b.[StartDate] AS [StartDate]
            , b.[StopDate] AS [StopDate]
            , b.[Description]
            , b.[Created]
            , bl.[BillId]
            , COALESCE(c.[Name], bill.RecipientCustomerName) AS [CustomerName]
            , COALESCE(ri.[Identifier], bill.[RecipientIdentifier]) AS [MedicaidNumber]
            , bill.[NetTotal] AS [ClaimAmount]
            , bl.[BillingCodeCode] AS [BillingCode]
            , bl.[BillingCodeDescription] AS [BillingCodeDescription]
            , bl.[StartDate] AS [FromDate]
            , bl.[StopDate] AS [ToDate]
            , bl.[UnitSizeName] AS [UnitSize]
            , bl.[CalculatedUnits] AS [Units]
            , bl.[Rate]
            , bl.[Amount]
            , fs.UsesModifiers
            , CASE WHEN fs.UsesModifiers = 1 THEN rm1.[Code] ELSE NULL END AS [RateModifier1Code]
            , CASE WHEN fs.UsesModifiers = 1 THEN rm2.[Code] ELSE NULL END AS [RateModifier2Code]
            , CASE WHEN fs.UsesModifiers = 1 THEN rm3.[Code] ELSE NULL END AS [RateModifier3Code]
            , CASE WHEN fs.UsesModifiers = 1 THEN rm4.[Code] ELSE NULL END AS [RateModifier4Code]
    FROM    [Batch] AS b 
            JOIN [Bill] AS bill ON b.[BatchId] = bill.[BatchId] 
            JOIN [BillLine] AS bl ON bill.[BillId] = bl.[BillId]
            JOIN [Customer] AS fs ON b.[PayerCustomerId] = fs.[CustomerId]
            LEFT JOIN [Customer] AS c ON bill.[RecipientCustomerId] = c.[CustomerId]
            LEFT JOIN [RecipientIdentifier] AS ri ON b.[PayerCustomerId] = ri.[PayerCustomerId] AND bill.[RecipientCustomerId] = ri.[RecipientCustomerId]
            LEFT JOIN [RateModifier] AS rm1 ON bl.[RateModifier1Id] = rm1.[RateModifierId]
            LEFT JOIN [RateModifier] AS rm2 ON bl.[RateModifier2Id] = rm1.[RateModifierId]
            LEFT JOIN [RateModifier] AS rm3 ON bl.[RateModifier3Id] = rm1.[RateModifierId]
            LEFT JOIN [RateModifier] AS rm4 ON bl.[RateModifier4Id] = rm1.[RateModifierId]
   WHERE    BatchAltId = @BatchAltId 
ORDER BY    [FundingSource], b.[StartDate], b.[Description], [CustomerName], [BillingCode], [FromDate], [ToDate]

1 Ответ

1 голос
/ 14 сентября 2011

Звучит глупо, но вы уверены, что пакет BIDS ссылается на базу данных на том же сервере, где выполняется запрос SSMS?Когда у меня происходили подобные вещи, я почти всегда обнаруживал ошибку в конфигурации пакета, а источник данных указывал на неправильный сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...