【问题标题】:How to copy a row from one SQL Server table to another如何将一行从一个 SQL Server 表复制到另一个
【发布时间】:2010-09-08 14:26:05
【问题描述】:

我有两个相同的表,需要将行从表复制到另一个表。最好的方法是什么? (我只需要以编程方式复制几行,不需要使用批量复制实用程序)。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:
    SELECT * INTO < new_table > FROM < existing_table > WHERE < clause >
    

    【讨论】:

    • 如果这两个表在 sql-server 的 diff 数据库中,有什么办法可以做到这一点。
    • 当然!只需完全限定数据库。 [服务器名].[架构].[表]。例如SELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]
    • 这会创建一个新表,这不是 OP 所要求的。
    【解决方案2】:

    只要没有身份列就可以了

    INSERT INTO TableNew
    SELECT * FROM TableOld
    WHERE [Conditions]
    

    【讨论】:

    • 小心使用这种语法,因为如果 Table2 有一个标识列,它将无法工作,并且如果 Table1 发生变化而 Table2 没有同步变化(之前让我很伤心),它将在未来中断。此解决方案可能非常适合您的情况,请注意这些注意事项。
    • 您可以使用SET IDENTITY_INSERT &lt; table &gt; ON(和SET IDENTITY_INSERT &lt; table &gt; OFF)来暂时禁用您要插入的表上的标识列。为我工作,试图在数据集中间恢复一些丢失的记录。
    • 如果table1中的主键作为外键存在于table2中怎么办?我有同样的事情,我不知道该怎么做..在表 2 中,外键为“Technology_idTechnology”,在表 1 中,它作为“idTechnology”存在,我想将表 1 中的所有条目复制到table2,当两个表中的 idTechnology 匹配时..
    【解决方案3】:

    替代语法:

    INSERT tbl (Col1, Col2, ..., ColN)
      SELECT Col1, Col2, ..., ColN
      FROM Tbl2
      WHERE ...
    

    选择查询(当然)可以包括表达式、case 语句、常量/文字等。

    【讨论】:

    • 当表格略有不同时,这很好。我的第二个表中有一些额外的列,并且接受的答案不适用于 MSSQL,因为它们需要相同。
    【解决方案4】:
    INSERT INTO DestTable
    SELECT * FROM SourceTable
    WHERE ... 
    

    在 SQL Server 中工作

    【讨论】:

    • 这仅在 DestTable 不存在时有效。如果在此查询之前创建了 DestTable,则会出现错误。
    • 实际上,如果目标表不存在,它会失败。如果现有的 DestTable 不为空,可能会导致错误。
    【解决方案5】:

    Jarrett 的回答创建了一个新表。

    Scott 的答案插入到具有相同结构的现有表中。

    您还可以插入到具有不同结构的表中:

    INSERT Table2
    (columnX, columnY)
    SELECT column1, column2 FROM Table1
    WHERE [Conditions]
    

    【讨论】:

    • @ScottStonehouse:如果您像以前一样将所有其他答案收集到此答案中,但使用代码(使其全面),那么您肯定会成为最佳答案。
    【解决方案6】:

    只选择几行..这将像魅力一样工作..

    SELECT TOP 10 *
    INTO db2.dbo.new_table
    FROM db1.dbo.old_table;
    

    注意:只需在所需的数据库中创建一个新表。我们不需要定义它的结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 2011-12-03
      相关资源
      最近更新 更多