Вставка результатов из таблицы с использованием CTE

Я пытаюсь вставить значения из таблицы, используя CTE, но что-то не работает. Я полагаю, что CTE не работает таким образом?

Может кто-нибудь объяснить мне, что здесь не так, и предложить мне альтернативу, или исправить мой запрос, если я что-то упустил?

WITH t1 AS( SELECT id_sitio as id_sitio FROM Sitio WHERE nombre = 'Insert your site name here')
         INSERT INTO Sitio_tipo_equipo (id_sitio, id_tipo_equipo) 
         VALUES 
            (t1.id_sitio ,4),
            (t1.id_sitio, 6),
            (t1.id_sitio, 7),
            (t1.id_sitio, 9);

2 ответа

Решение

Я думаю, что это ваше намерение

WITH t1 AS (
      SELECT id_sitio
      FROM Sitio
      WHERE nombre = 'Insert your site name here'
)
INSERT INTO Sitio_tipo_equipo(id_sitio, id_tipo_equipo) 
     SELECT t1.id_sitio, n.n
     FROM t1 CROSS JOIN
          (SELECT 4 as n UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 9
          ) n

Вы обычно не используете CTE с insert . . . values заявление.

С информацией под рукой...

INSERT INTO Sitio_tipo_equipo (id_sitio, id_tipo_equipo) 
   SELECT id_sitio,eq.id_tipo_equipo
   FROM Sitio
   CROSS APPLY (
      SELECT 4 [id_tipo_equipo] UNION
      SELECT 6 UNION
      SELECT 7 UNION
      SELECT 9
   ) eq
   WHERE nombre = 'Insert your site name here'

Что бы я сделал, если бы мог правильно угадать структуру вашей базы данных:

   INSERT INTO Sitio_tipo_equipo (id_sitio, id_tipo_equipo) 
       SELECT id_sitio,id_tipo_equipo
       FROM Sitio
       CROSS APPLY tipo_equipo
       WHERE nombre = 'Insert your site name here'
       AND id_tipo_equipo IN (4,6,7,9)
Другие вопросы по тегам