2017-09-14 5 views
0

뷰의 결합을 수행하여 임시 테이블에 데이터를 삽입하려고하는데 다음 오류가 발생했습니다. 그 이유가 무엇일 수 있습니다. 정상적인 선택을하면 쿼리가 잘 실행됩니다.문제의 원인이되는 뷰의 합집합을 사용하여 테이블에 삽입

이 쿼리에서 힌트가 이므로 쿼리 프로세서가 쿼리 계획을 생성 할 수 없습니다. 힌트를 지정하지 않고 SET FORCEPLAN을 사용하지 않고 쿼리를 다시 제출하십시오. 당신이 작동합니다 작성한 무엇

insert into #temp 
SELECT 'aaa', COUNT(*) FROM view1 
UNION 
SELECT 'bbb', COUNT(*) FROM view2 
UNION 
SELECT 'ccc', COUNT(*) FROM view3 
UNION 
SELECT 'ddd', COUNT(*) FROM view4 
UNION 
SELECT 'eee', COUNT(*) FROM view5 
UNION 
SELECT 'fff', COUNT(*) FROM view6 
UNION 
SELECT 'ggg', COUNT(*) FROM view7 
UNION 
SELECT 'hhh', COUNT(*) FROM view8 
+1

? BTW, 제거 할 복제본이 없기 때문에'UNION ALL'을 여기에서 사용합니다. – jarlh

+0

Microsoft SQL Server .. UNION ALL을 사용하여 문제를 해결할 예정입니까?. – RAJ

+0

UNION ALL이 일반적인 조언이었습니다. 오류 메시지가 명확하게 "_ 힌트를 지정하지 않고 SET FORCEPLAN._을 사용하지 않고 쿼리를 다시 제출" – jarlh

답변

1

. 2 가지를 확인하십시오. 임시 테이블이므로 뷰의 UNION에서 뷰를 제거하면 뷰가 수정되는지 확인하십시오. 그런 다음 해당 뷰를 개별적으로 확인하십시오. 모든 뷰를 스크립팅하고 NOLOCK, EXPAND 등과 같은 힌트를 사용하는지 확인하십시오. 어느 것이 문제의 원인인지 확인하십시오.

또한, 당신처럼 쓰기 시도 할 수 있습니다이

insert into #temp 
SELECT field, total FROM 
(SELECT 'aaa' field, COUNT(*) total FROM view1 
UNION 
SELECT 'bbb', COUNT(*) FROM view2 
UNION 
SELECT 'ccc', COUNT(*) FROM view3 
UNION 
SELECT 'ddd', COUNT(*) FROM view4 
UNION 
SELECT 'eee', COUNT(*) FROM view5 
UNION 
SELECT 'fff', COUNT(*) FROM view6 
UNION 
SELECT 'ggg', COUNT(*) FROM view7 
UNION 
SELECT 'hhh', COUNT(*) FROM view8) Z 
사용중인 DBMS