所有我刚刚发现的东西对我来说似乎很奇怪,或者可能我不了解这些NewID()值的性质,我清楚地看到顺序是错误的,对于Asc和Desc,您能否帮助我进行测试在其他env /
SELECT DATABASEPROPERTYEX('NXTest', 'Collation') ----SQL_Latin1_General_CP1_CI_AS
; WITH cte AS ( SELECT * FROM (
SELECT '1' RecID, NewID() ID UNION SELECT '2' RecID, NewID() ID UNION SELECT '3' RecID, NewID() ID UNION
SELECT '4' RecID, NewID() ID UNION SELECT '5' RecID, NewID() ID UNION SELECT '6' RecID, NewID() ID )b )
SELECT * INTO #t FROM cte
SELECT *, LEN(iD) FROM #t order BY ID DESC
这些也是我的ID,也用于真实测试:
SELECT * FROM (
SELECT '1' RecID, 'B299ADAD-6A0C-4904-B04A-699714594175' ID UNION SELECT '2' RecID, '6CA58D90-CEDF-49E7-8C39-731A2B3F2387' ID UNION
SELECT '3' RecID, 'F3CBCA7E-5F6E-42F5-B7E1-9DEF050239F6' ID UNION SELECT '4' RecID, 'FD22EAD9-094C-4F50-98D0-3A5D4EE0A500' ID UNION
SELECT '5' RecID, '9E3BFE14-701E-419E-B830-AD8717D9FA58' ID UNION SELECT '6' RecID, 'AA35A5EC-0D09-43C8-B7CE-EB5948DD05A7' ID )b
答案 0 :(得分:2)
在表中插入 NEWID()
值时,数据类型为 uniqueidentifier
。因此,您必须将其投射到 varchar
。这就是排序不正确的原因。
;with cte as (
select * from (
select '1' as [RecID], cast(NewID() as varchar(36)) [ID] union
select '2' as [RecID], cast(NewID() as varchar(36)) [ID] union
select '3' as [RecID], cast(NewID() as varchar(36)) [ID] union
select '4' as [RecID], cast(NewID() as varchar(36)) [ID] union
select '5' as [RecID], cast(NewID() as varchar(36)) [ID] union
select '6' as [RecID], cast(NewID() as varchar(36)) [ID]
) b
)
select * into #t
from cte;
select *, len([ID]) from #t
order by [ID] desc;