考虑使用tbl1
和ID
的一个表Name
。
带有params
的表值参数ID
。
我需要复制tbl1
中包含ID
params
的行。
我想像这样插入
insert into tbl1(Name,somevalues..)
select tbl1.Name, tbl1.somevalues..
from @params p
inner join tbl1 on tbl1.ID=p.ID -- here ID is identity (PK).
但插入后,发现插入顺序不同。如果我单独运行选择查询,它将显示基于@params
(TVP)的ID。但是我在插入后使用的相同查询将以不同的方式执行。
TVP中的订单/选择查询 - A. 使用Select Query - B
插入时的顺序 A B
370294 370294
368702 368702
369157 368504
368914 368505
368505 368914
368504 369157
368508 368506
368506 368507
368507 368508
368912 368637
368637 368638
368638 368639
368639 368912
368915 368915
368641 368641
有些ID在顺序上有所不同。
不同订单会出现什么问题?
如何按照与TVP相同的顺序插入值?
提前致谢。
答案 0 :(得分:3)
始终:没有ORDER BY,ORDER是任意的。
这意味着即使您确实对INSERT使用了ORDER BY,也不能保证稍后的SELECT返回,除非在SELECT上使用ORDER BY。
换句话说:表或视图中没有隐含的或自然顺序。
您只能使用ORDER BY
修改
然而。应该注意的是,INNER JOIN既是可交换的又是关联的。也就是说,您获得相同的结果。你问的是我上面回答的ORDER
更多信息,请参阅
答案 1 :(得分:1)
您不应该依赖SELECT
次查询的插入顺序。使用ORDER BY
末尾的SELECT
子句定义如何订购结果。