Sql server 防止在SQL Server中自动排序
我正在尝试运行以下查询:Sql server 防止在SQL Server中自动排序,sql-server,tsql,Sql Server,Tsql,我正在尝试运行以下查询: Select * From table Where ID In ('100', '20', '222', '1', '15') 当我运行以下查询时,结果集按ID顺序返回。 ID是主键 如何确保按中指定的顺序返回结果集。当您有主键时,数据将根据主键进行排序和存储。实际上,在主键后面,SQLServer创建了一个。聚集索引的一个特点是数据总是基于它进行物理排序 如果需要按自定义顺序显示数据,则需要使用order By进行指定 @Brad当前提供了一个示例查询,该查询
Select *
From table
Where ID In ('100', '20', '222', '1', '15')
当我运行以下查询时,结果集按ID顺序返回。
ID是主键
如何确保按中指定的顺序返回结果集。当您有主键时,数据将根据主键进行排序和存储。实际上,在主键后面,SQLServer创建了一个。聚集索引的一个特点是数据总是基于它进行物理排序 如果需要按自定义顺序显示数据,则需要使用order By进行指定
@Brad当前提供了一个示例查询,该查询根据IN子句对数据进行排序:当您有主键时,数据将根据主键进行排序和存储。实际上,在主键后面,SQLServer创建了一个。聚集索引的一个特点是数据总是基于它进行物理排序 如果需要按自定义顺序显示数据,则需要使用order By进行指定
@Brad目前提供了一个示例查询,该查询根据IN子句对数据进行排序:如果不希望使用默认排序,则需要明确说明所需结果的顺序
SELECT *
FROM TABLE
WHERE ID IN ('100','20','222','1','15')
ORDER BY
CASE WHEN ID = '100' THEN 1
WHEN ID = '20' THEN 2
WHEN ID = '222' THEN 3
WHEN ID = '1' THEN 4
WHEN ID = '15' THEN 5
END
如果不希望使用默认排序,则需要明确说明所需结果的顺序
SELECT *
FROM TABLE
WHERE ID IN ('100','20','222','1','15')
ORDER BY
CASE WHEN ID = '100' THEN 1
WHEN ID = '20' THEN 2
WHEN ID = '222' THEN 3
WHEN ID = '1' THEN 4
WHEN ID = '15' THEN 5
END
还有另一种选择。XML解析器将包含一个序列号
Declare @List varchar(max) = '100,20,222,1,15'
Select A.*
From YourTable A
Join (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
From (Select x = Cast('<x>' + replace(@List,',','</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
) B on A.ID=B.RetVal
Order by B.RetSeq
还有另一种选择。XML解析器将包含一个序列号
Declare @List varchar(max) = '100,20,222,1,15'
Select A.*
From YourTable A
Join (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
From (Select x = Cast('<x>' + replace(@List,',','</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
) B on A.ID=B.RetVal
Order by B.RetSeq
SELECT不按任何特定顺序对结果排序,并且输出不保证为任何顺序。如果它是按ID排序的,那么它只是一个共关联,在没有ORDER by子句的情况下,您不应该依赖它进行排序。SELECT不会按任何特定顺序对结果排序,并且不能保证输出为任意顺序。如果它是按ID排序的,那么它只是一个共关联,在没有ORDER by子句的情况下,您不应该依赖它进行排序。数据总是根据主键进行排序和存储。不,这是默认行为。但也可能有不同的群集键或堆组织表。@ShannonSeverance感谢您的评论,我已经更新了答案并消除了歧义。数据总是根据主键排序和存储的。不,这是默认行为。但是也可以使用不同的集群键或堆组织的表。@ShannonSeverance谢谢您的评论,我已经更新了答案并消除了歧义