От процедуры к просмотру - PullRequest
0 голосов
/ 21 декабря 2011

Код ниже прекрасно работает как процедура. Как я могу преобразовать или изменить один и тот же код ниже, чтобы он мог работать в представлении или как код представления или представление?

Могу ли я отказаться от просмотра?

ALTER proc [dbo].[NewOne_1]
as
begin
set nocount on

if  object_ID('TEMPDB..#TableA') <> ''
drop table # TableA
select 
    *
into # TableA
from vd_View  po   

if object_ID('TEMPDB..#FirstSDate') is not null  
   drop table #FirstSDate
select 
    Pt_id = Pat_Id,
    Date_of_First_Shipment = min(DeliveryDate)
into #FSDate    
from # TableA  po
group by Pat_Id        

if object_ID('TEMPDB..#LastSDate') is not null   
   drop table #LastShipDate
select 
    Pt_id = Pat_Id,
    Date_of_Last_Shipment = max(DeliveryDate)
into #LastShipDate  
from # TableA  po
group by Pat_Id                                  

SELECT PtData.Pat_No                Progress_Pat_ID
    ,C_S = case when  dbo.fn_GetBusinessDays(firstship.Date_of_First_Shipment,LastShip.Date_of_Last_Shipment) > 80 then 'Yes'  
                                         when  dbo.fn_GetBusinessDays(firstship.Date_of_First_Shipment,LastShip.Date_of_Last_Shipment) <= 80 then 'No' 
                                        else ''
                                        end
    ,P_Last_Name = PtData.P_LName
    ,PtData.DReg        Reg
    FROM dbo.tbld_PatSum PtData
    inner join vd_PSum ps
        on PtData.P = ps.P_ID
    inner join S_M.dbo.Pat__c ps1 
        on PtData.Pt_ID = ps1.Id              
        left join #FirstShipDate firstship    
        on PtData.Pt_ID = firstship.Pt_Id     
        left join #LastShipDate LastShip      
        on PtData.Pt_ID = LastShip.Pt_Id      
        WHERE PtData.Pat_No IS NOT NULL 
        AND PtData.ActiveStatus<>'Gen Info'

    set nocount off
end

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Я предполагаю, что вы хотите использовать это, чтобы присоединиться к чему-то другому. Вы не можете поставить это в поле зрения. Однако, возможно, вы сможете поместить это в табличную функцию, которая позволит вам выполнить то, что, я думаю, вам нужно.

0 голосов
/ 22 декабря 2011

- только что взял ваш код (он довольно грязный), функция dbo.fn_GetBusinessDays должна быть детерминированной, чтобы работать в представлении

     create view test as        

SELECT 
   PtData.Pat_No                Progress_Pat_ID
    ,C_S = case when  dbo.fn_GetBusinessDays(firstship.Date_of_First_Shipment,LastShip.Date_of_Last_Shipment) > 80 then 'Yes'  
                                         when  dbo.fn_GetBusinessDays(firstship.Date_of_First_Shipment,LastShip.Date_of_Last_Shipment) <= 80 then 'No' 
                                        else ''
                                        end
    ,P_Last_Name = PtData.P_LName
    ,PtData.DReg        Reg
    FROM dbo.tbld_PatSum PtData
    inner join vd_PSum ps
        on PtData.P = ps.P_ID
    inner join S_M.dbo.Pat__c ps1 
        on PtData.Pt_ID = ps1.Id              
        left join (
            select 
            Pt_id = Pat_Id,
            Date_of_First_Shipment = min(DeliveryDate)
            from vd_View  po
            group by Pat_Id  ) firstship    
        on PtData.Pt_ID = firstship.Pt_Id     
        left join (select 
    Pt_id = Pat_Id,
    Date_of_Last_Shipment = max(DeliveryDate) 
from vd_View  po
group by Pat_Id  ) LastShip      
        on PtData.Pt_ID = LastShip.Pt_Id      
        WHERE PtData.Pat_No IS NOT NULL 
        AND PtData.ActiveStatus<>'Gen Info'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...