从递归查询错误中查看
Posted
技术标签:
【中文标题】从递归查询错误中查看【英文标题】:view from recursive query error 【发布时间】:2018-08-28 07:10:18 【问题描述】:我有一个运行良好的递归查询:
with cte as (
select ps.SetProduct from PRODSET ps
left join PRODUCT pr on pr.Product= ps.Product
where ...
union all
select ps.SetProduct from PRODSET ps
inner join cte on ps.Product= cte.SetProduct
)
select distinct cte.SetProduct from cte
添加“创建视图”会在最后一行出现错误“关键字 'SET' 附近的语法不正确”。我什至没有使用 SET。
完整代码:
create view wiev_product as
with cte as (
select ps.SetProduct from PRODSET ps
left join PROD pr on pr.Product= ps.Product
where ...
union all
select ps.SetProduct from PRODSET ps
inner join cte on ps.Product= cte.SetProduct
)
select distinct cte.SetProduct from cte
我正在通过一个未指定的 ERP 系统访问 MS SQL 服务器。是 ERP 限制,还是我的查询有问题?
代码中是否有任何解决方法,我可以尝试?
谢谢。
编辑:Microsoft SQL Server 2012 (SP1)
没有 ; 的错误 156 as with
错误 102 ;在 as ;with cte 之间
【问题讨论】:
trought an unspecified ERP system
- 它是否允许任何 DDL?
没有人能读懂你的想法或看到你的屏幕。您说“通过未指定的 ERP 系统访问……”。这到底是什么意思呢?您可以使用 SSMS 创建视图吗?并发布生成错误的完整 sql 语句以及视图创建语句(如果这不是错误的来源)。最后提供 COMPLETE 错误消息 - 它的每一点。
如果这是您的整个查询,那么它一定是您的 ERP 的某种错误/限制。此代码似乎有效。
【参考方案1】:
这是 ERP 限制。我没有从 cte 创建视图,也没有在第二个查询中使用该视图作为条件,而是设法使用两个 cte 在单个查询中完成所有操作。
with cte1 as (
select ps.SetProduct from PRODSET ps
left join PRODUCT pr on pr.Product= ps.Product
where ...
union all
select ps.SetProduct from PRODSET ps
inner join cte on ps.Product= cte.SetProduct
),
cte2 as (
select ps.SetProduct from PRODSET ps
left join PRODUCT pr on pr.Product= ps.Product
where ...
union all
select ps.SetProduct from PRODSET ps
inner join cte on ps.Product= cte.SetProduct
)
select distinct cte1.SetProduct from cte1
where cte1.SetProduct not in (select ... from cte2 where ...)
【讨论】:
以上是关于从递归查询错误中查看的主要内容,如果未能解决你的问题,请参考以下文章