SQL Server:从一个表到另一个表的INSERT

时间:2017-06-09 17:35:08

标签: sql sql-server sql-insert

我遇到了一个问题,即将数据从一个表插入到另一个表中,具有相同的表结构,但具有不同的列位置。

示例:

表1:

     emp1:
          Name    char 50
          Age     int
          Salary  Float

表2:

     emp2:
          Name    char 50
          Salary  Float 
          Age     int

我的代码:

insert into emp1
select * from emp2

我无法插入,因为列顺序从一个表到另一个表不同,但是,这两个表具有相同的名称和数据类型。

3 个答案:

答案 0 :(得分:3)

你可以(或者@tring_s提到应该)指定列。

这样做你可以改变这些表的结构(可能发生,对吧?)而没有任何后果(除非你删除这些列)。你的代码仍然有效。

此外,指定列名称对任何人来说都更具可读性。您无需调用sp_help或任何其他命令来检查结构(表模式)。

BTW在两个表或任何表中都有主键,如果不指定所搜索的列,则会抛出异常:

  

如果INSERT语句违反约束或规则,或者它的值与列的数据类型不兼容,则语句将失败并返回错误消息。

     

如果INSERT使用SELECT或EXECUTE加载多行,则从加载的值中发生的任何规则或约束的违反都会导致语句停止,并且不会加载任何行。

    INSERT INTO emp1 (Name
        ,Age 
        ,Salary )
    SELECT Name
        ,Age 
        ,Salary
    FROM emp2

答案 1 :(得分:0)

测试此查询,它应该工作:

insert into emp1 select Name, Age, Salary from emp2;

我建议您阅读this教程。

答案 2 :(得分:0)

很简单,只需在插入过程中对列进行重新排序:

INSERT INTO `emp1` (Name, Salary, Age)
SELECT Name, Salary, Age FROM `emp2`;