이전 글에 계속 문의를 하는것보다 새로 작성하는게 나을것 같아, 새로 작성하겠습니다.
이전글에서 with 구문을 작성하고 select * into 구문을 작성했는데, 제가 잘못 알고 있었던 것 같습니다.
<올바른 구문>
-- SELECT * INTO new_table
-- FROM original_table;
즉 select * into 구문을 먼저 쓰고, original_table에 with 구문이 와야하는 걸로 생각됩니다. ('마농' 님이 답변주신게 아마 이 내용을 말씀하신듯 합니다.)
그래서 아래와 같이 구문을 변경했는데 안타깝게도 여전히 에러가 발생하고 있는 상황입니다.
select * into temp8
from (
with
temp7 as
(
select ....
from ....
where ...
)
select *
from temp7
where ...
)
* 에러메세지 : 키워드 'with' 근처의 구문이 잘못되었습니다.
-- 1. WITH 구문 이용 -- 이전 질문글의 첫번째 답변
WITH temp7 AS
(
SELECT ...
FROM ...
WHERE ...
)
SELECT *
INTO temp8
FROM temp7
WHERE ...
;
-- 2. 인라인뷰(From 절 서브쿼리) 이용 -- 이전 질문글의 마지막 답변
SELECT *
INTO temp8
FROM (SELECT ...
FROM ...
WHERE ...
) temp7
WHERE ...
;
해당 내용으로 구글링을 좀 해봤는데....
with 를 이용한 select into 구문에서 오류가 있다는 내용이 있네요
(https://stackoverflow.com/questions/74546400/using-a-with-clause-inside-select-into)
구성이 가능하다면 인라인뷰 형태로 구성하시는게 더 좋을 듯 합니다.
언급해주신 1번으로 해서 성공했습니다. 답답하셨을텐데 답변주셔서 정말 감사드립니다.
* 제가 위에서 언급한 select * into 구문을 먼저 쓰고, original_table에 with 구문을 작성하는게 틀린방법이었군요..
많이 배워갑니다. 다시 한 번 감사드립니다.
with 를 이용한 select into 구문 자체가 안되는게 아니라
with 를 from 절 안에서 사용해서 안되는 것으로 보이네요.
with 를 맨 위에 사용하면 문제 없습니다.
해당 내용의 답변에 달린 글들을 보니 정상적 with 문 처리된 쿼리를 이용해서도 에러난다는 코멘트가 있어서요.
2년 전 이야기이기도 하니... 버전의 문제였을 수도 있겠네요.
저는 테스트 해보니 정상 수행됩니다. (MSSQL 2017)
--정상적 with 문 처리된 쿼리를 이용해서도 에러난다는 코멘트가 있어서요 -- -> 제가 알기론 MSSQL 에서 WITH문 작성할 때 WITH 문 앞에 세미콜론을 붙여야하는 걸로 알고 있습니다 ;WITH TEMP AS ( //쿼리 ) SELECT * FROM TEMP
해당 링크의 코멘트를 확인하면 with 문 앞에 세미콜론을 쓴건 그 전에 다른 쿼리가 있는거 같아서 그 쿼리의 영향을 받지 않으려고 세미콜론을 사용한 것으로 보여집니다.
쿼리 시작이 세미콜론인 것이 아니고, 기존 쿼리의 마지막을 표기하기위한 세미콜론 인것이죠.
제가 답변한 내용은 확인을 안하셨나보네요ㅠㅠ
제가 코멘트를 드린다는걸 깜빡했습니다. 죄송합니다.
언급해주신 방법으로 시도했는데 잘 안돼서, 계속 질문을 드리고 있는 상황이었습니다.
소중한 답변 정말 감사드립니다.
세미콜론(;)은 WITH 문 앞에 붙이는게 아니라
SQL 문장의 가장 마지막에 붙이는 것이죠.
SQL 문장이 여기서 끝난다는 것을 표시.