Хранимая процедура SQL Server вызывает несколько хранимых процедур и не может вернуть результат - PullRequest
1 голос
/ 19 января 2012

У меня есть хранимая процедура (USA2YearPremiumAnalysis), которая вызывает два варианта другой хранимой процедуры (2YearPremiumAnalysisByState) с разными переменными.

Итак, код для SP-Parent выглядит следующим образом:

CREATE PROCEDURE USA2YearPremiumAnalysis
   @ContractYear1 INT
   , @importDate1 DATETIME
   , @importDate2 DATETIME
   , @EnrollmentYear1 INT
   , @EnrollmentYear2 INT
   , @EnrollmentMonth1 INT
   , @EnrollmentMonth2 INT
AS
   EXECUTE MAInfo.[2YearPremiumAnalysisByState] 
   @ContractYear1, 
   @importDate1, @importDate2, 
   @EnrollmentYear1, @EnrollmentYear2, 
   @EnrollmentMonth1, @EnrollmentMonth2,
   0

   EXECUTE MAInfo.[2YearPremiumAnalysisByState] 
   @ContractYear1, 
   @importDate1, @importDate2, 
   @EnrollmentYear1, @EnrollmentYear2, 
   @EnrollmentMonth1, @EnrollmentMonth2, 
   1
GO

Это не возвращает никаких данных. Тем не менее, если я позвоню:

   EXECUTE MAInfo.[2YearPremiumAnalysisByState] 
   @ContractYear1, 
   @importDate1, @importDate2, 
   @EnrollmentYear1, @EnrollmentYear2, 
   @EnrollmentMonth1, @EnrollmentMonth2,
   0

   EXECUTE MAInfo.[2YearPremiumAnalysisByState] 
   @ContractYear1, 
   @importDate1, @importDate2, 
   @EnrollmentYear1, @EnrollmentYear2, 
   @EnrollmentMonth1, @EnrollmentMonth2, 
   1

Я получаю то, что ожидаю.

Процедура Child довольно сложна. Это работает, когда вы вызываете процедуру с теми же переменными, которые передаются в родительский процесс.

Как мне заставить родительскую процедуру вернуть 2 результирующие таблицы?

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Я бы посоветовал вам просмотреть эту обширную статью из Erland, озаглавленную «Как обмениваться данными между хранимыми процедурами» - http://www.sommarskog.se/share_data.html

В статье подробно описаны примеры для каждого варианта.Надеюсь, вы найдете это полезным.

0 голосов
/ 19 января 2012

Дочерняя процедура - это очень длинная многошаговая процедура, написанная динамически. Было две проблемы, одна из которых была проблемой в дочерней процедуре, из-за которой для динамического sql было установлено значение NULL. Вторым было то, как я тестировал свою проблему верхнего уровня: я набирал разные числа для дочерней процедуры, когда запускал их вручную, и, таким образом, меня одурачили, думая, что они работают.

Если бы я сделал это, я бы знал, что моя проблема была немедленно в дочерних процессах:

DECLARE @ContractYear1 INT = 2011
DECLARE @importDate1 DATETIME = '7/27/2011 12:00:00 AM'
DECLARE @importDate2 DATETIME = '6/7/2010 12:00:00 AM'
DECLARE @EnrollmentYear1 INT = 2011
DECLARE @EnrollmentYear2 INT = 2010
DECLARE @EnrollmentMonth1 INT = 7
DECLARE @EnrollmentMonth2 INT = 9

--EXEC MAInfo.USA2YearPremiumAnalysis @ContractYear1, -- int
--    @importDate1, -- datetime
--    @importDate2, -- datetime
--    @EnrollmentYear1, -- int
--    @EnrollmentYear2, -- int
--    @EnrollmentMonth1, -- int
--    @EnrollmentMonth2-- int

EXECUTE MAInfo.[2YearPremiumAnalysisByState] 
    @ContractYear1, 
    @importDate1, -- datetime
    @importDate2, -- datetime
    @EnrollmentYear1, -- int
    @EnrollmentYear2, -- int
    @EnrollmentMonth1, -- int
    @EnrollmentMonth2,
    0

EXECUTE MAInfo.[2YearPremiumAnalysisByState] 
    @ContractYear1, 
    @importDate1, @importDate2, 
    @EnrollmentYear1, @EnrollmentYear2, 
    @EnrollmentMonth1, @EnrollmentMonth2, 
    1

Спасибо за ваше время и извините за погоню за гуся!

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