Зайдите с заявлением

#sql #sql-server

Вопрос:

Я пытаюсь создать оператор sql, в котором есть как оператор «с», так и оператор «отбросить», но, похоже, он не может заставить его работать. Я пробовал ставить drop как перед, так и после оператора «с», но это всегда приводит к синтаксической ошибке. Неужели нет никакого способа достичь этого?

 with cte as (
select abc from temp1
union all
select abc from temp2)
drop table if exists TMP.dummy_table
SELECT cte.abc, tb.id, tb.name
into TMP.dummy_table
from cte
join tableEmployee tb on cte.abc = tb.abc
 

Запрос-это фиктивный запрос, но он показывает, что я пытаюсь сделать. Не могли бы вы все, пожалуйста, помочь мне с этим.

Комментарии:

1. Не могли бы вы, пожалуйста, сказать мне, что не так с этим вопросом. почему проголосовали против

2. С моей точки зрения, вопрос в порядке вещей. Вероятно, кто-то, хорошо разбирающийся в SQL, подумал, что это тривиальная проблема…

3. Прекратите применять шаблон, который обычно является плохой привычкой — использование.. в …>, чтобы создать своего рода временную рабочую таблицу.

4. Не могли бы вы, пожалуйста, пояснить, что вы подразумеваете под рисунком здесь

Ответ №1:

С/SELECT-это один оператор, и, поскольку ваш оператор DROP прерывается, это создает синтаксическую ошибку. Поскольку вы используете удаленную таблицу в запросе, вам необходимо переместить оператор DROP перед запросом. Убедитесь, что у вас есть ; в конце УДАЛЕНИЯ, иначе синтаксический анализатор выдаст синтаксическую ошибку, когда дойдет до С.

 DROP TABLE IF EXISTS TMP.dummy_table;
WITH cte as (
    SELECT abc
    FROM temp1
    UNION ALL
    SELECT abc
    FROM temp2)
SELECT cte.abc, tb.id, tb.name
INTO TMP.dummy_table
FROM cte
JOIN tableEmployee tb ON cte.abc = tb.abc;
 

Комментарии:

1. Это требование заставляет меня снова воссоздать таблицу. Я забыл добавить это в заявление. добавил его!

2. @fellowCoder Обновил мой ответ. В принципе, одно и то же.