Используя временную таблицу в представлении

Я действительно хотел бы создать представление.

Я знаю, что Вы не можете использовать временные таблицы в представлениях MSSQL2005. Не переписывая sql, там что-либо очевидное, которое я пропустил?

План резервного копирования должен использовать сохраненный proc.

Удачи

select * into #temp from vwIncidents 

SELECT     vwIncidents.incidentcode, employeecode, EMPOS.POS_L4_CDA as areaAtTimeOfIncident
into #temp1
FROM         vwIncidents 
INNER JOIN EMPOS ON vwIncidents.employeecode = EMPOS.DET_NUMBERA 
WHERE    EMPOS.POS_STARTC <  vwIncidents.incidentdate
AND      (EMPOS.POS_ENDD > vwIncidents.incidentdate OR EMPOS.POS_ENDD IS NULL)
order by incidentcode

select #temp.*, #temp1.areaAtTimeOfIncident from #temp
left outer join #temp1 on #temp.incidentcode = #temp1.incidentcode 
and #temp.employeecode = #temp1.employeecode
order by incidentcode
5
задан Dave Mateer 26 April 2010 в 03:45
поделиться

3 ответа

Вы пытались переписать это без использования временных таблиц?

Что-то вроде

select  temp.*, 
        temp1.areaAtTimeOfIncident 
from    (
            select * 
            from vwIncidents
        ) temp  left outer join 
        (
            SELECT  vwIncidents.incidentcode, 
                    employeecode, 
                    EMPOS.POS_L4_CDA as areaAtTimeOfIncident 
            FROM    vwIncidents  INNER JOIN 
                    EMPOS   ON vwIncidents.employeecode = EMPOS.DET_NUMBERA  
            WHERE   EMPOS.POS_STARTC <  vwIncidents.incidentdate 
            AND     (   
                        EMPOS.POS_ENDD > vwIncidents.incidentdate 
                        OR EMPOS.POS_ENDD IS NULL
                    )
        ) temp1     on  temp.incidentcode = temp1.incidentcode  
                and temp.employeecode = temp1.employeecode 
order by incidentcode 
3
ответ дан 13 December 2019 в 22:04
поделиться

Вы можете использовать CTE:

WITH cteIncidents (incidentcode, employeecode, areaAtTimeOfIncident)
AS
(
SELECT 
    vwIncidents.incidentcode, employeecode, EMPOS.POS_L4_CDA as areaAtTimeOfIncident 
FROM
    vwIncidents  
INNER JOIN EMPOS ON vwIncidents.employeecode = EMPOS.DET_NUMBERA  
WHERE    EMPOS.POS_STARTC <  vwIncidents.incidentdate 
AND      (EMPOS.POS_ENDD > vwIncidents.incidentdate OR EMPOS.POS_ENDD IS NULL) 
)

SELECT 
    incidentcode, employeecode, areaAtTimeOfIncident
FROM 
    cteIncidents 
left outer join vwIncidents on vwIncidents.incidentcode = cteIncidents.incidentcode  
and vwIncidents.employeecode = cteIncidents.employeecode 
ORDER BY
    incidentcode 

(Возможно, нужно изменить соединение вправо, но вы поняли идею ...)

7
ответ дан 13 December 2019 в 22:04
поделиться

Используйте оператор WITH .

0
ответ дан 13 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: