不用union 拼接,把union 换成 insert into tblteacher 

解决方案 »

  1.   

    是union的特性问题,应该把union改成union all,就像下面这样:insert into TblTeacher (tchName, tchGender, tchAge, tchSalary, tchBirthday)
    select '小米',1,18,1500,'1991-9-1' union all
    select '小明',1,19,1700,'1990-3-5' union all
    select '小红',0,20,1800,'1992-3-4' union all
    select '小兰',1,18,1900,'1993-5-1' union all
    select '小昂',1,19,1710,'1990-3-5' union all
    select '小敏',0,20,1810,'1992-3-4' union all
    select '小k',1,18,1520,'1991-9-1' union all
    select '小华',1,19,1730,'1990-3-5' union all
    select '小D',0,20,1830,'1992-3-4'
    因为union本身的特性是“distinct+union all”(排序+合并),我们一般的sqlserver的排序规则都是中文,所以一旦进行排序,就是以汉语拼音顺序,小D的“D”就是第一位;改成union all,就只具备合并功能,不会进行排序,所以可以保持语句编写时的顺序。因此,如果使用distinct,也可以重现上面的排序问题。select distinct tchName from TblTeacher
      

  2.   

    你整个INSERT INTO的执行顺序是 先UNION 合并, 然后对最后的结果集进行DISTINCT操作。 这个操作
    会默认从一列开始排序。所有最终插入表里面的顺序和你写的顺序无关。而是和第一行的的排序有关。
      

  3.   

    我试过了,用union all 可以,谢谢
      

  4.   

    你的方法是可以,但这样做可以认为是每次只增加一行数据吧?是的,UNION内置会进行排序,然后去重,所以顺序会按照数据库的排序规则或者表中的某些索引定义,但是如果表设计合理的话应该插入顺序是无所谓的