插入顺序如何影响输出插入值?

时间:2013-03-08 10:36:23

标签: sql sql-server-2008

我从互联网上的各种来源了解到以下sql:

insert into mainTable(status)
output inserted.mainid into tmpTable(TARGET_ID)
select '0' from impTable
order by impid asc;

不保证行将按照select语句中“order by”指定的顺序插入mainTable中,尽管mainTable标识列(mainid)中的值将按正确顺序排列。 / p>

我的问题是它如何影响输出到tmpTable的inserted.mainid。 它们是否会在mainTable中插入行的顺序添加到tmpTable中,还是会将生成的mainid标识值的顺序包含在内?

没关系SQL的用处,这是一个技术问题。

编辑:修复了SQL示例中的列不匹配问题

3 个答案:

答案 0 :(得分:2)

正如您在评论中说明mainid是一个IDENTITY列,其值会单调增加但是,因为您插入的值不是来自impTable我看不出来这很重要。

每个新的mainId都会插入tmpTable。数据将按照clutsered索引tmpTable的顺序存储,如果tmpTable没有聚簇索引,则订单未定义。除性能原因外,这两种方式无关紧要。当您从tmpTable中选择数据时,除非您指定ORDER BY,否则结果的顺序将是未定义的。

答案 1 :(得分:1)

表格中存储的订单行无关紧要,因为您无法观察该订单。在没有order by的情况下选择时,订单是未定义的,并且不一定符合存储的订单。由于这个原因,存储的订单毫无意义。

没有办法说“按存储顺序给我所有行”。你只能说“以任何顺序归还”或“按照这个确切的顺序归还”。

答案 2 :(得分:0)

无法知道订单。

如果您从MSDN(http://msdn.microsoft.com/en-us/library/ms177564.aspx)查看此页面,您会发现以下声明:

“无法保证更改应用于表的顺序以及将行插入输出表或表变量的顺序将对应。”