【问题标题】:SQL Server 'select * into' versus 'insert into ..select *SQL Server 'select * into' 与 'insert into ..select *
【发布时间】:2012-01-23 12:59:25
【问题描述】:

table1table2已经存在,这些查询有什么区别

查询1:-

select * into table1 from table2 where 1=1

查询2:-

insert into table1 select * from table2

【问题讨论】:

标签: sql-server select-into


【解决方案1】:

select * into table1 from table2 where 1=1 创建 table1 并将 table2 的值插入其中。因此,如果表已创建,则该语句会出错。

insert into table1 select * from table2 只在 table1 中插入 table2 的值。

【讨论】:

  • 我不知道如果表存在,query-1 会产生错误。非常感谢!
【解决方案2】:

第一个 (SELECT INTO) 将创建并填充一个新表,第二个 (INSERT... SELECT) 将插入到现有表中。

在 2008 年之前的 SQL Server 版本中,第一个可以最低限度地记录,而第二个则不是 this is no longer true

【讨论】:

    【解决方案3】:
    select * into table1 from table2 where 1=1
    

    上面的查询要求表不存在。您无需指定列,因为所有列都是在从源表中检索时创建的。

    insert into table1 select * from table2 
    

    对于上述查询,您需要一个 EXISTING table1。 两个表中的列的顺序也应该完全相同,否则需要为两个表提供列列表。

    【讨论】:

      【解决方案4】:

      在下面的查询中,table1 将被创建,如果它已经存在则会抛出错误

      select * into table1 from table2 where 1=1
      

      在下面的查询中,表table1必须在运行命令之前存在

      insert into table1 select * from table2
      

      【讨论】:

        【解决方案5】:
        INSERT INTO TABLE_A SELECT * FROM TABLE_B
        

        是一个常用语句,用于将一个表的值插入到另一个表中。也可以使用它插入选定的列。

        SELECT * INTO TABLE_A FROM TABLE_B
        

        将创建一个填充有 TABLE_B 值的新 TABLE_A

        【讨论】:

          【解决方案6】:

          a) select * into table1 from table2 where 1=1 - 如果 table1 和 table2 已经存在,执行查询时会出现以下错误。 “消息 2714,第 16 级,状态 6,第 1 行 数据库中已经有一个名为 'table1' 的对象"

          b) 插入 table1 选择 * from table2 - 如果 table1 与 table2 重复,则此查询考虑普通插入语句 Exp: select * into table1 from table2 where 1=0 不管怎样,每次执行查询都会累积重复数据。

          【讨论】:

            猜你喜欢
            • 2023-02-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-16
            • 2014-04-23
            • 1970-01-01
            • 2023-03-13
            • 2014-03-22
            相关资源
            最近更新 更多