小菜鸟求搭救

zeng0915 2014-08-29 10:24:54
为神马我插入的信息不是按代码的顺序呢??
是哪里需要设置么??还是代码不对么??
望各位指点迷津
...全文
133 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
-狙击手- 2014-08-30
  • 打赏
  • 举报
回复
不用union 拼接, 把union 换成 insert into tblteacher
xiaodongni 2014-08-30
  • 打赏
  • 举报
回复
你整个INSERT INTO的执行顺序是 先UNION 合并, 然后对最后的结果集进行DISTINCT操作。 这个操作 会默认从一列开始排序。所有最终插入表里面的顺序和你写的顺序无关。而是和第一行的的排序有关。
laoer_2002 2014-08-30
  • 打赏
  • 举报
回复
引用 2 楼 happyflystone 的回复:
不用union 拼接, 把union 换成 insert into tblteacher
按二楼说的试一下
發糞塗牆 2014-08-30
  • 打赏
  • 举报
回复
引用 6 楼 zeng0915 的回复:
[quote=引用 2 楼 happyflystone 的回复:] 不用union 拼接, 把union 换成 insert into tblteacher
你的方法是可以,但这样做可以认为是每次只增加一行数据吧?[/quote]是的,UNION内置会进行排序,然后去重,所以顺序会按照数据库的排序规则或者表中的某些索引定义,但是如果表设计合理的话应该插入顺序是无所谓的
zeng0915 2014-08-30
  • 打赏
  • 举报
回复
引用 3 楼 xzb001 的回复:
是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
我试过了,用union all 可以,谢谢
zeng0915 2014-08-30
  • 打赏
  • 举报
回复
引用 2 楼 happyflystone 的回复:
不用union 拼接, 把union 换成 insert into tblteacher
你的方法是可以,但这样做可以认为是每次只增加一行数据吧?
xzb001 2014-08-30
  • 打赏
  • 举报
回复
是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
o0Jian0o 2014-08-29
  • 打赏
  • 举报
回复
建议你重建张表。理论上来说这种情况是不会发生的,再建一张表试试看

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧