在SQL Server中使用CTE进行插入操作的查询

3
我希望使用CTE从另一个表中插入到一个表中。我尝试在with之前加上分号,但不起作用。
这是我的查询语句:
INSERT INTO [autoFIE2].[dbo].[tbl_article_type_parent_child] ([art_typ_parent_index], [art_typ_child_index])
WITH article_type_list AS
(
    SELECT 
       art_typ_child_index, art_typ_parent_index
    FROM
       [autoFIE2].[dbo].[tbl_article_type_parent_child]  
    WHERE 
       art_typ_parent_index IS NULL 
    UNION ALL
    SELECT 
       a.art_typ_child_index, a.art_typ_parent_index
    FROM
       [autoFIE2].[dbo].[tbl_article_type_parent_child] A 
    INNER JOIN 
       article_type_list as AL ON a.art_typ_parent_index = al.art_typ_child_index
    WHERE 
       a.art_typ_parent_index IS NOT NULL)
SELECT * 
FROM article_type_list;

执行此语句时出错:

消息156,级别15,状态1,第4行
关键字“with”附近的语法不正确。

消息319,级别15,状态1,第4行
关键字“with”附近的语法不正确。如果此语句是一个常用表达式、xmlnamespaces子句或更改跟踪上下文子句,则前一个语句必须以分号结束。

如何将这个分层数据插入到另一个表中?有什么建议吗?


你不需要使用CTE将子查询包装起来。 - Mostafa Armandi
1个回答

7

首先声明cte,然后从cte中选择插入列表进行插入:

;WITH article_type_list AS
(
    SELECT 
       art_typ_child_index, art_typ_parent_index
    FROM
       [autoFIE2].[dbo].[tbl_article_type_parent_child]  
    WHERE 
       art_typ_parent_index IS NULL 
    UNION ALL
    SELECT 
       a.art_typ_child_index, a.art_typ_parent_index
    FROM
       [autoFIE2].[dbo].[tbl_article_type_parent_child] A 
    INNER JOIN 
       article_type_list as AL ON a.art_typ_parent_index = al.art_typ_child_index
    WHERE 
       a.art_typ_parent_index IS NOT NULL
)
INSERT INTO [autoFIE2].[dbo].[tbl_article_type_parent_child] 
([art_typ_parent_index], [art_typ_child_index])
SELECT * FROM article_type_list;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接