【问题标题】:how can I get a variable with all the results and iterate over it?如何获得包含所有结果的变量并对其进行迭代?
【发布时间】:2014-05-02 02:08:47
【问题描述】:

我有一个包含一些记录的表,大约 40 条,称为 Table1。

我想在另一个表中为每个这些记录创建一个新寄存器,但我不知道该怎么做。我想为每条记录迭代一个while循环并将记录插入另一个表中,但我不知道如何(语法)。

我想要这样的东西:

foreach record in myTable1
     Insert into Table2(IDTable1) VALUES(record.IDTable1)
end foreach

我不知道 SQL Server 中的脚本。

谢谢。

【问题讨论】:

  • 插入表 2 (IDTable1) 从 myTable1 中选择 IDTable1
  • 遍历游标是任何数据库最糟糕的性能杀手。您几乎总是可以创建一个 INSERT ... FROM 语句来完成相同的工作,只需要 1/1000 的时间(至少)。
  • 您不会(通常/如果可以避免的话)在 SQL 中循环。您编写一个描述整个总体目标的查询,然后让数据库系统找出最好的方法。

标签: sql sql-server while-loop


【解决方案1】:

SQL Server 在大多数情况下是基于集合的。这意味着查询和行按集合、分组和按子句过滤。只有在极少数情况下,您才会想要或需要遍历结果集中的每一行并对其进行处理。

我会说在您的情况下,您希望将一个表的内容复制到另一个表。您可以通过多种方式做到这一点,但最简单的一种是这样的:

SELECT
  IDTable1
INTO
  Table2
FROM
  Table1

这假定Table2 不存在,并将创建它。如果Table2 已经存在,您的语法将更改为与其他答案所指示的一样:

INSERT INTO Tabel2( IDTable1 )
SELECT
  IDTable1
FROM
  Table1

【讨论】:

    【解决方案2】:

    如果你只有插入,你可以这样做:

    INSERT INTO Table2 (IDTable1)
    SELECT IDTable1 FROM myTable1
    

    它将从myTable1中选择所有IDTable1并将它们插入到Table2中。

    【讨论】:

      猜你喜欢
      • 2016-06-09
      • 2014-07-28
      • 2019-03-04
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 2021-06-03
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多