2011-12-21 4 views
-1

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

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

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 
+1

Вы не можете поместить этот код в представление, как объяснил вчера , Представления не могут содержать процедурную логику или делать такие вещи, как отбрасывание таблиц. –

+0

Как я могу преобразовать этот код так, чтобы он работал над View. В соответствии с просьбой я сейчас поставлю код. Я должен сделать это для столбца C_S – user680865

+1

Я понятия не имею, что вы спрашиваете. Что такое 'Как я могу преобразовать или изменить один и тот же код ниже, чтобы он мог работать в представлении или в виде кода вида или вида? 'означает? Вы должны сделать что для столбца 'C_S'? –

ответ

1

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

+0

Табличные функции не могут делать такие вещи, как drop и создавать временные таблицы. –

+0

Можем ли мы использовать If Object_ID (View) и Drop View? – user680865

+0

@MartinSmith, на самом деле это неверно. Вы можете манипулировать временными таблицами в функции, но не в других таблицах. Кроме того, вы всегда можете менять временные таблицы для переменных таблицы. – JamieSee

0

--just взял свой код (это довольно грязный), функция 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' 
Смежные вопросы