1
왜 t-SQL 문에서 공통 테이블 식을 따르는 조건문을 얻을 수 없는지 궁금합니다. 이 같은t-SQL의 CTE 절 뒤에 오는 조건부 INSERT
물건 :
WITH ctx AS(...)
IF ctx.v BEGIN
INSERT INTO ...
END
은 내가
sample fiddle here했다.
왜 t-SQL 문에서 공통 테이블 식을 따르는 조건문을 얻을 수 없는지 궁금합니다. 이 같은t-SQL의 CTE 절 뒤에 오는 조건부 INSERT
물건 :
WITH ctx AS(...)
IF ctx.v BEGIN
INSERT INTO ...
END
은 내가
sample fiddle here했다.
공통 테이블 표현식은 기본적으로 여러 SQL 문에서 재사용 할 수있는 하위 쿼리입니다. 따라서 어떤 경우이든 선택해야합니다. 변수처럼 참조 할 수는 없습니다. 그것을 임시 테이블과 같이 생각하십시오.
조건을 where 절로 추가하면 원하는 것을 얻을 수 있습니다.
WITH ctx AS(
SELECT MIN(t1.dtIn) AS mdIn, MAX(t1.dtOut) AS mdOut FROM tbl t1
INNER JOIN tbl t2
ON t1.Type = t2.Type
AND t1.dtIn < t2.dtOut
AND t1.dtOut > t2.dtIn
WHERE t1.type = 1
)
INSERT INTO tbl (id, dtIn, dtOut, type)
SELECT 10,
CASE WHEN mdOut IS NOT NULL AND
mdOut > '0:30' AND
'0:40' >= mdOut THEN mdOut
ELSE '0:30' END,
CASE WHEN mdIn IS NOT NULL AND
mdIn < '0:40' AND
'0:30' >= mdIn THEN mdIn
ELSE '0:40' END,
1
FROM ctx
where ctx.mdIn < '0:40' AND ctx.mdOut > '0:30'
select * from tbl
매우 감사합니다. 나는 거의 거기에 있었다 :) 단지 호기심에서, 이것은 INSERT INTO에서 WHERE를 사용할 수 있다는 것을 의미 하는가? – ahmd0
@ ahmd0 아니요, where 절은 select에 적용되지만 실제로는 용도에 맞게 동일합니다. insert ... select 구조를 사용하는 경우 어디에서나 where 절을 사용하여 선택된 항목과 삽입되는 항목을 제한 할 수 있습니다. – Bert
from 또는/select에 from 절이 없으면 from 절을 사용할 수 있습니다. 'CREATE TABLE #x (i INT); INSERT #x (i) SELECT 1 WHERE 1 = 0; ' –