我正在使用SELECT和进行批量插入表UNION.我需要SELECT在调用时保持值的顺序不变INSERT,但似乎值是按升序插入的,而不是我指定的顺序.
例如,下面的insert语句
declare @QuestionOptionMapping table
(
[ID] [int] IDENTITY(1,1)
, [QuestionOptionID] int
, [RateCode] varchar(50)
)
insert into @QuestionOptionMapping (
RateCode
)
select
'PD0116'
union
select
'PL0090'
union
select
'PL0091'
union
select
'DD0026'
union
select
'DD0025'
SELECT * FROM @QuestionOptionMapping
Run Code Online (Sandbox Code Playgroud)
将数据呈现为
(5 row(s) affected)
ID QuestionOptionID RateCode
----------- ---------------- --------------------------------------------------
1 NULL DD0025
2 NULL DD0026
3 NULL PD0116
4 NULL PL0090
5 NULL PL0091
(5 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
如何选择插入的数据返回与插入时相同的顺序?
SQL Server将您的行存储为无序集.数据点可能是也可能不是连续的,它们可能在或可能不在插入语句中指定数据的"顺序"中.
查询数据时,引擎将按优化程序确定的最有效顺序检索行.每次查询数据时,无法保证订单相同.
保证结果集顺序的唯一方法是在SELECT语句中包含显式ORDER BY子句.
请参阅此答案,以深入讨论为什么会出现这种情况.SELECT查询中的默认行顺序 - SQL Server 2008 vs SQL 2012
通过对INSERT语句使用SELECT/UNION选项,您将创建SQL Server作为集合而不是作为一系列输入进行摄取的无序集.如果需要将插入按顺序应用IDENTITY值,请将插入分隔为离散语句.更好的是,如果行编号很重要,请不要遗漏.显示插入行的行数.
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |