-1


0

De la procédure à la vue

Le code ci-dessous fonctionne parfaitement comme procédure. Comment puis-je transformer ou modifier le même code ci-dessous afin qu’il puisse fonctionner dans View ou en tant que code View ou View?

Puis-je supprimer View?

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 Answer


1


Je suppose que vous voulez pouvoir l’utiliser pour vous joindre à autre chose. Vous ne pouvez pas mettre cela en vue. Cependant, vous pourrez peut-être mettre cela dans une fonction table qui vous permettrait d’accomplir ce que je pense que vous recherchez.


0


--J’ai juste pris votre code (c’est assez compliqué), la fonction dbo.fn_GetBusinessDays doit être déterministe pour fonctionner dans une vue

     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'