【问题标题】:SQL Server copy all rows from one table into another i.e duplicate tableSQL Server 将一个表中的所有行复制到另一个表中,即重复表
【发布时间】:2010-04-22 13:59:56
【问题描述】:

我想保留一张表作为历史记录并用一个空表替换它。如何通过 Management Studio 做到这一点?

【问题讨论】:

    标签: sql sql-server-2008 ssms


    【解决方案1】:

    将您的表格复制到要存档的表格中:

    SELECT * INTO ArchiveTable FROM MyTable
    

    删除表格中的所有条目:

    DELETE * FROM MyTable
    

    【讨论】:

    • 这仅在 ArchiveTable 尚未创建的情况下才有效,否则您将收到错误“数据库中已存在名为 'ArchiveTable ' 的对象。”。
    • TRUNCATE 是比 DELETE 更好的选择。
    • 注意这个方法复制的是表的列结构和内容,而不是索引或者主键信息。
    【解决方案2】:

    周围没有 sql server 可以测试,但我认为它只是:

    insert into newtable select * from oldtable;
    

    【讨论】:

    • 不错的一个!但我从不相信字段的顺序;)
    • 如果在这样的查询中应该使用“SELECT *”的任何地方......它会复制表而无需知道其中的内容。
    • @Robin - 我同意 * 在这里是一个不错的选择,IF 字段的顺序是相同的;)
    • 如果您执行“插入...从...中选择*”,那么顺序很重要。如果您使用“select * into ... from ...”,它会为您创建表格,因此列顺序并不重要。当然,使用这种方法时,表必须事先不存在。
    • 嗯,问题确实是重复表,所以我认为他的意思是精确副本。
    【解决方案3】:
    select * into x_history from your_table_here;
    truncate table your_table_here;
    

    【讨论】:

    【解决方案4】:

    您可以使用 RAW SQL:

    INSERT INTO DEST_TABLE (Field1, Field2) 
    SELECT Source_Field1, Source_Field2 
    FROM SOURCE_TABLE
    

    或者使用向导:

    1. 右键单击数据库 -> 任务 -> 导出数据
    2. 选择源/目标数据库
    3. 选择源/目标表并 字段
    4. 复制数据

    然后执行:

    TRUNCATE TABLE SOURCE_TABLE
    

    【讨论】:

      【解决方案5】:

      试试这个单个命令来删除和插入数据

      DELETE MyTable
          OUTPUT DELETED.Col1, DELETED.COl2,...
              INTO MyBackupTable
      

      工作样本:

      --set up the tables
      DECLARE @MyTable table (col1 int, col2 varchar(5))
      DECLARE @MyBackupTable table (col1 int, col2 varchar(5))
      INSERT INTO @MyTable VALUES (1,'A')
      INSERT INTO @MyTable VALUES (2,'B')
      INSERT INTO @MyTable VALUES (3,'C')
      INSERT INTO @MyTable VALUES (4,'D')
      
      --single command that does the delete and inserts
      DELETE @MyTable
          OUTPUT DELETED.Col1, DELETED.COl2
              INTO @MyBackupTable
      
      --show both tables final values
      select * from @MyTable
      select * from @MyBackupTable
      

      输出:

      (1 row(s) affected)
      
      (1 row(s) affected)
      
      (1 row(s) affected)
      
      (1 row(s) affected)
      
      (4 row(s) affected)
      col1        col2
      ----------- -----
      
      (0 row(s) affected)
      
      col1        col2
      ----------- -----
      1           A
      2           B
      3           C
      4           D
      
      (4 row(s) affected)
      

      【讨论】:

      • 这看起来更优雅的解决方案。谢谢
      【解决方案6】:

      这将起作用:

      select * into DestinationDatabase.dbo.[TableName1] from (
      Select * from sourceDatabase.dbo.[TableName1])Temp
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 2017-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多