현재 하나의 CTE를 사용하는 저장 프로 시저가 있습니다. 이 기능은 다음과 같이 작동합니다.SQL 값을 지정하지 않고 임시 테이블에 삽입 하시겠습니까?
WITH MY_CTE AS
(
// Logic here uses SELECT * from a single table.
)
SELECT *
INTO #Tasks
FROM MY_CTE;
이제 선택적으로 원래의 임시 테이블에 더 많은 데이터를 추가 할 다른 CTE를 호출해야한다는 요구 사항이 있습니다. 나는 이런 식으로 뭔가를 기대했다 :
IF @Option = 1
BEGIN
INSERT INTO #Tasks
(
WITH MY_OTHER_CTE
(
// Logic here uses SELECT * from same table as first CTE.
)
SELECT *
FROM MY_OTHER_CTE
)
END
문제는 INSERT INTO #Tasks
호출이 VALUES
열을 지정이 필요하다는 것이다. 두 테이블 모두 CTE의 반환 레코드입니다. 원래 저장 프로 시저의 장점은 SELECT *
을 사용했기 때문에 해당 테이블의 열이 변경된 경우에도 작동한다는 것입니다. I 은 공유 테이블에있는 항목을 알고있는 열을 지정하지만이 이점은 손실됩니다 (이 특별한 경우에는 매우 유용한 이점 임). 내가하고 싶은 일을 성취 할 수있는 방법이 있는가? 그들이 같은 테이블에서 선택하고 열이 항상 일치한다는 것을 알았습니까?
멋진 작품입니다. 나는 올바른 구문을 가지고 있지 않은 것 같아요. 그래도 잠재적 인 신분증 열 문제에 대해 자세히 설명해 주시겠습니까? 테이블에 ID 열이 있지만 여전히 잘 작동하는 것 같습니다. 두 번째 CTE는 첫 번째 CTE에서 첫 번째 CTE를 삽입 할 가능성이 없으므로 그 유일한 관심사였습니까? 감사. – Ocelot20
내 자신의 테스트에서 ID 열에이 오류가 발생했습니다. " '#Tasks'테이블의 ID 열에 대한 명시 적 값은 열 목록이 사용되고 IDENTITY_INSERT가 ON 일 때만 지정할 수 있습니다." 그래서 시험, 시험, 시험, 행운. –