Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用CTE从表中插入结果_Sql_Sql Server_Sql Server 2008_Tsql_Common Table Expression - Fatal编程技术网

Sql 使用CTE从表中插入结果

Sql 使用CTE从表中插入结果,sql,sql-server,sql-server-2008,tsql,common-table-expression,Sql,Sql Server,Sql Server 2008,Tsql,Common Table Expression,我试图使用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)

我试图使用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);

有了手头上的信息

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)

有了手头上的信息

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)

我认为这是你的意图:

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与
插入一起使用。价值观
声明。

我认为这是您的意图:

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与
插入一起使用。值
语句。

为了确保我理解,最终结果是您需要所有id Sitio的Sitio tipo设备记录和id tipo设备值4、6、7和9。对吗?@鬼说得对!为了确保我理解,最终结果是您需要一个所有id Sitio的Sitio tipo equipo记录,id tipo equipo值为4、6、7和9。对吗?@鬼说得对!您在
选择中忘记了
t1.n
,在
选择中忘记了
t1.n