sqlserver数据表排序问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver数据表排序问题相关的知识,希望对你有一定的参考价值。
表的id用的是NewId()生成的,插入数据时排序很混乱(比如十一月十二号插入的新闻,可能排在十一月十三号插入数据的前面),想请教下各位,sqlserver数据表数据插入的时候可以定义默认的数据排列顺序吗?
参考技术A 你这个问题,本人以前就遇到过,目前按照时间排序(order by 时间)输出是最好的办法。库里有多乱你也不用看啊!----
第二种办法:根据了一位数据库大师的推导方式,A ->R,那么(A,B)->R
,所以建立复合聚集主键就可以了。
如果非要创建单列主键,那么ID 最好不要创建 唯一约束,或是单列主键。如果不信你自己多试试。
如下有代码 你可以试试:
----------
USE [LEdwin]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
DROP TABLE [dbo].[A]
GO
CREATE TABLE [dbo].[A](
[ID] [uniqueidentifier] NOT NULL,
[CreateDate] [datetime] NOT NULL
) ON [PRIMARY]
ALTER TABLE A WITH NOCHECK
ADD CONSTRAINT [PK_A] PRIMARY KEY CLUSTERED
(CreateDate ASC,ID ASC)
GO
CREATE NONCLUSTERED INDEX C_CreateDate ON A(CreateDate ASC)
WITH
FILLFACTOR=50
GO
--CREATE UNIQUE NONCLUSTERED INDEX U_NONC_ID ON A(ID)
--WITH
--FILLFACTOR=50
declare @cnt int set @cnt=0
declare @Monday datetime set @Monday=getdate()
while @cnt<10
begin
insert into A(ID,CreateDate) values (newid(),dateadd(s,@cnt,@Monday))
set @cnt=@cnt+1
end
SELECT [ID],[CreateDate] FROM [LEdwin].[dbo].[A]
--------
执行结果:
429BE969-2F91-4603-B0C5-D38CCDA7C069 2012-11-17 09:11:50.513
0D5B03D1-5739-4202-A875-95982A986751 2012-11-17 09:11:51.513
AC02C770-9FB3-44E9-AA14-00E80B473EFB 2012-11-17 09:11:52.513
1FEDAA92-95C6-437A-8D84-7DA9F9914501 2012-11-17 09:11:53.513
FFB334F6-BBB2-431D-8856-557BA876BA63 2012-11-17 09:11:54.513
8BA91F63-9643-412C-9F4D-F3DD23E9C4AB 2012-11-17 09:11:55.513
4DCB295D-4B3C-4FEA-9DAB-7DFFCC6BD3312012-11-17 09:11:56.513
EBDB669D-1D99-4BC8-90B1-04D46AA8D876 2012-11-17 09:11:57.513
FFD9DFF1-14DF-4D18-9888-3E67A5E81614 2012-11-17 09:11:58.513
C22B1E6C-E1F8-4901-A8B7-A5F7EB9551F0 2012-11-17 09:11:59.513
----
这样直接查看就可以。 参考技术B 可以在ID上建立一个聚集索引,使数据按照ID的排序顺序来存储。
当然你也可以在查询时使用order by 来指定查询出来的数据的排列顺序。 参考技术C 试试把NEWID()改成NEWSEQUENTIALID()本回答被提问者采纳 参考技术D 不晓得你这个NewId()方法是怎么写的,我自己也写过一个类似的方法,思路是这样的:
首先,获取数据表的行数。
然后在NewId()方法里int id=行数+1,这样就保证了插入的数据永远排在最后一行。
SqlServer数据库中文乱码问题解决
1.右键数据库》属性
2.点击“选项”》修改排序方式
解决方法2:
最彻底的就是重装SQL,在安装时自定义安装,选好语言版本及排序规则,这样问题就解决了。
参数解释如下:
前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。
排序规则的后半部份即后缀 含义:
_BIN 二进制排序
_CI(CS) 是否区分大小写,CI不区分,CS区分
_AI(AS) 是否区分重音,AI不区分,AS区分
_KI(KS) 是否区分假名类型,KI不区分,KS区分
_WI(WS) 是否区分宽度WI不区分,WS区分
区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。
区分重音:如果想让重音和非重音字母视为不等,请选择该选项。如果选择该选项,
比较还将重音不同的字母视为不等。
区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项
以上是关于sqlserver数据表排序问题的主要内容,如果未能解决你的问题,请参考以下文章
SQLserver排序问题,字段中含有字母、数字、汉字,如何只按数字排序