使用导致问题的视图联合插入表
Posted
技术标签:
【中文标题】使用导致问题的视图联合插入表【英文标题】:insert into table using union of views causing issues 【发布时间】:2017-09-14 07:47:13 【问题描述】:我正在尝试通过合并视图将数据插入临时表,但出现以下错误。这可能是什么原因。当我正常选择时,查询运行良好。
由于提示,查询处理器无法生成查询计划 在此查询中定义。重新提交查询而不指定任何提示 并且不使用 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
【问题讨论】:
您使用的是哪个 dbms?顺便说一句,我会在这里做UNION ALL
,因为没有要删除的重复项。
Microsoft SQL Server..使用 UNION ALL 可以解决问题吗?
UNION ALL 是一般性建议。错误消息清楚地显示“重新提交查询而不指定任何提示且不使用 SET FORCEPLAN。”
【参考方案1】:
您所写的内容应该有效。检查两件事。由于它是一个临时表,请检查从视图的 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
【讨论】:
以上是关于使用导致问题的视图联合插入表的主要内容,如果未能解决你的问题,请参考以下文章
在 redshift 中使用分区视图(联合所有多个表)按表分区