2014-04-18 3 views
0

CTE 내의 임시 테이블에 데이터를 삽입하려고합니다. 내가 사용하는 코드는 다음과 같습니다. 누군가가 왜 작동하지 않는지에 대한 약간의 지침을 제공 할 수 있습니까?CTE의 임시 테이블에 삽입

Create Table #Clients 
(HospMastID smallint Null 
,HospCode smallint Null 
,ClientID smallint Null 
,ControlGroup smallint Null); 

,Clients 
as 
    (Insert Into #Clients 
    Select 
    Distinct 
    HospMastID 
    ,HospCode 
    ,ClientID 
    From 
    Final) 

감사합니다, 스콧 간단히

답변

0

, 당신은 CTE 내부에 삽입 기능을 사용할 수 없습니다. "CTE"가 다중 CTE 스크립트의 다른 CTE 중 하나라고 가정하고 CTE 스크립트 외부로 INSERT INTO #Clients를 이동하십시오. CTE를 사용하고 있기 때문에 임시 테이블이 필요없는 것 같습니다. 클라이언트 CTE는 임시 테이블 또는 사용 가능할 것입니다. 임시 테이블을 완전히 없애고 CTE 방법을 계속 사용하는 것이 좋습니다. 질문의 범위를 넓히기 위해 더 많은 스크립트를 게시해야 할 수도 있습니다.

,Clients as 
    (Select 
    Distinct 
    HospMastID 
    ,HospCode 
    ,ClientID 
    From 
    Final) 
+0

그게 내가 생각하고 있었던거야. 내가하려는 것은 모든 클라이언트를 선택한 다음 해당 클라이언트에서 컨트롤 그룹을 추가하는 것입니다. 이것은 문제가되지 않지만 두 개의 CTE를 함께 사용하려고하면 1 시간 이상이 걸리며 임시 테이블이 더 빨라질 수 있습니다. 각각의 개별 작품을 실행하는 데 약 3 분 정도 걸립니다. 하지만 조인은 영원합니다. 쿼리를 위로 이동하여 다음 단계를 보여줍니다. – SASUSMC

+0

@SASUSMC "CTE의 임시 테이블에 삽입"이라는 질문의 원래 범위에 대한 답변을 제공하므로 내 대답을 대답으로 확인할 수 있습니까? 고마워요, icvader. – icvader

0
Create Table #Clients1 
(standardid int Null 
,fullnumber Varchar(200) Null 
,description Varchar(1000) Null); 

WITH standard_cte AS ( 
SELECT standardid, fullnumber, 
description FROM standard WHERE standardid = 1370 
UNION ALL 
SELECT s.standardid, s.fullnumber, s.description FROM standard s 
INNER JOIN standard_cte ON standard_cte.standardid = s.parentid) 

Insert Into #Clients1(standardid ,fullnumber, description) 
SELECT tempTable.standardid, fullnumber, description 
FROM (SELECT standardid, fullnumber, CONVERT(VARCHAR(MAX), description) as description FROM standard_cte WHERE standardid <> 1370) tempTable 

GROUP BY tempTable.StandardID, fullnumber, description 

select * from #Clients1 

drop table #Clients1 
+0

이 CTE의를 사용하여 훨씬 더 큰 쿼리의 극히 일부입니다. 계속하려면이 시점에서 CTE가 필요합니다. 테이블에 삽입 한 후에는 더 많은 CTE를 실행해야합니다. 그 말이 맞는다면. 나는 매우 오랫동안 전체 쿼리를 제공하고 싶지 않았습니다. – SASUSMC

0
CREATE TABLE #Clients (
     HospMastID SMALLINT NULL 
    , HospCode  SMALLINT NULL 
    , ClientID  SMALLINT NULL 
    , ControlGroup SMALLINT NULL 
) 

WITH Clients (HospMastID, HospCode, ClientID) 
AS 
(
    SELECT DISTINCT HospMastID, HospCode, ClientID 
    FROM Final 
) 
INSERT INTO #Clients 
SELECT HospMastID, HospCode, ClientID 
FROM Clients