2015-01-21 3 views
1

Я хочу вставить в одну таблицу из другой таблицы с помощью CTE. Я попытался поставить точку с запятой до with, но она не работает.Вставить запрос с помощью CTE в SQL Server

Это мой запрос:

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; 

Ошибка при выполнении этого договора: -

Msg 156, Level 15, State 1, Line 4
Неправильный синтаксис около ключевого слова 'с' ,

Msg 319, Level 15, State 1, Line 4
Неверный синтаксис рядом с ключевым словом 'with'. Если этот оператор является общим табличным выражением, предложение xmlnamespaces или контекстное предложение отслеживания изменений , предыдущий оператор должен быть прерван точкой с запятой .

Что нужно сделать, чтобы вставить эти иерархические данные в другую таблицу. Любое предложение ?

+0

Вам не нужно обернуть подзапрос с КТР –

ответ

3

Объявите 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; 
Смежные вопросы