INSERT INTO와 WITH / CTE 결합
매우 복잡한 CTE가 있으며 결과를 실제 테이블에 삽입하고 싶습니다.
다음이 유효합니까?
INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos
(
BatchID,
AccountNo,
APartyNo,
SourceRowID
)
WITH tab (
-- some query
)
SELECT * FROM tab
재사용 할 수있는이 CTE를 작성하는 기능을 사용하려고합니다. 이견있는 사람?
CTE를 먼저 넣고 INSERT INTO를 select 문과 결합해야합니다. 또한 CTE 이름 뒤에 나오는 "AS"키워드는 선택 사항이 아닙니다.
WITH tab AS (
bla bla
)
INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos (
BatchID,
AccountNo,
APartyNo,
SourceRowID
)
SELECT * FROM tab
이 코드는 CTE가 정확히 4 개의 필드를 반환하고 해당 필드가 INSERT 문에 지정된 순서와 유형으로 일치한다고 가정합니다. 그렇지 않은 경우 "SELECT *"를 원하는 필드 선택으로 바꾸십시오.
함수 사용에 대한 귀하의 질문에 대해서는 "의존합니다"라고 말할 것입니다. 성능상의 이유로 인해 데이터를 테이블에 저장하고 함수를 통해 데이터를 사용할 때 속도가 허용되는 경우 함수를 옵션으로 간주합니다. 반면에 CTE 결과를 여러 다른 쿼리에서 사용해야하고 속도가 이미 문제인 경우 테이블 (정규 또는 임시)로 이동합니다.
WITH common_table_expression (Transact-SQL)
네:
WITH tab (
bla bla
)
INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos ( BatchID, AccountNo,
APartyNo,
SourceRowID)
SELECT * FROM tab
이것은 여러 CTE를 지원하는 SQL Server 용입니다.
WITH x AS (), y AS () INSERT INTO z (a, b, c) SELECT a, b, c FROM y
Teradata는 하나의 CTE 만 허용하며 구문은 예제입니다.
WITH
공통 테이블 식에 대한 절은 상단에 이동합니다.
CTE에서 모든 삽입을 래핑하면 쿼리 매핑을 열 매핑에서 시각적으로 분리 할 수 있다는 이점이 있습니다.
실수를 찾아 내십시오 :
WITH _INSERT_ AS (
SELECT
[BatchID] = blah
,[APartyNo] = blahblah
,[SourceRowID] = blahblahblah
FROM Table1 AS t1
)
INSERT Table2
([BatchID], [SourceRowID], [APartyNo])
SELECT [BatchID], [APartyNo], [SourceRowID]
FROM _INSERT_
같은 실수:
INSERT Table2 (
[BatchID]
,[SourceRowID]
,[APartyNo]
)
SELECT
[BatchID] = blah
,[APartyNo] = blahblah
,[SourceRowID] = blahblahblah
FROM Table1 AS t1
A few lines of boilerplate make it extremely easy to verify the code inserts the right number of columns in the right order, even with a very large number of columns. Your future self will thank you later.
참고URL : https://stackoverflow.com/questions/3306096/combining-insert-into-and-with-cte
'development' 카테고리의 다른 글
멤버 함수의 정적 변수 (0) | 2020.06.14 |
---|---|
별도 dll의 부분 클래스 (0) | 2020.06.14 |
각도 2-innerHTML 스타일링 (0) | 2020.06.14 |
라디안을도 단위로 변환하는 방법은 무엇입니까? (0) | 2020.06.14 |
파이썬에 레이블 / 고토가 있습니까? (0) | 2020.06.14 |