sqlserver排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver排序相关的知识,希望对你有一定的参考价值。

在sqlserver里面用语句完成,job.name表示要执行的工作,job.fater表示依赖关系,即第一个工作必须要第二个工作做完才能做。需求:根据依赖关系排序出job.name,既工作的顺序。思路:用遍历???

参考技术A 排序可以是升序的 (ASC),也可以是降序的 (DESC)。如果未指定是升序还是降序,就假定为 ASC。
下面的查询返回按 ProductID 升序排序的结果:
代码如下 复制代码

USE AdventureWorks2008R2;
GO
SELECT ProductID, ProductLine, ProductModelID
FROM Production.Product
ORDER BY ProductID;

如果 ORDER BY 子句中指定了多个列,则排序是嵌套的。下面的语句先按产品子类别降序排序 Production.Product 表中的行,然后在每个产品子类别中按 ListPrice 升序排序这些行。

代码如下 复制代码
USE AdventureWorks2008R2;
GO
SELECT ProductID, ProductSubcategoryID, ListPrice
FROM Production.Product
ORDER BY ProductSubcategoryID DESC, ListPrice;

问题
同一个查询的结果集为什麽有时候是按他想要的顺序排列,有时候又不是,或者是在SQL2000里是这个顺序,到了SQL2005/2008又是那个顺序?
其实,只要语句里没有指定“order by”,SQLSERVER并不会按照顺序返回的。有可能你的表里有一个字段已经建立了索引
你想结果集按照那个建立了索引的字段排序,那么你不指定“order by”是没有问题的,因为表的存储顺序就是按照那个字段
的顺序排好序了,所以可以不指定“order by”,但是如果你没有在想排序的那个字段建立索引,或者在SQL2000里建立了
索引,而在SQL2005/2008里没有建立索引,那么就要明确地用“order by”指定。如果你没有指定,哪怕一模一样的查询,
结果集顺序这一次和上一次不一样是很正常的。

sqlserver 排序规则的问题

我要使用php语言在编码为utf-8的页面存储和读取sqlserver 2008中的数据,但是涉及到汉字的时候就出现乱码。当将页面编码换成gb2312时,就正常显示汉字。但是我必须使用utf-8,那么数据库的排序规则该为什么呢?
其默认为Chinese_PRC_CU_AS

alter table [表名] alter column [列名] [类型] COLLATE Chinese_PRC_CI_AS

[类型] 最好选用 nvarchar,nchar

存储数据时如果出现乱码,可能情况如下:
1.提交到数据库的字符是乱码
2. 数据库排序规则不支持该字符集
3.数据库表字段的类型设计不合适,最好选用nvarchar,nchar
4.插入字符串时强制存储格式 insert into [表名] ([字段1]) values(N'字符串'),最好在字符串前指定 N追问

数据库字段类型就是nvarchar,但是php页面若用utf-8时,中文显示就是乱码

追答

你可以打印SQL语句,在本机调试,数据库跟页面没关系,只跟提交到数据库的SQL有关系,然后按上面的方法测试。。。

参考技术A SQL Server存储汉字是采用的UCS2编码方案,官方对于需要用UTF-8编码显示汉字的解决方法如下
在服务器端,应使用 Session.CodePage 属性或 @Codepage 指令来指定客户端的编码方案。例如,codepage = 65001 指定了 UTF-8 编码方案

这是ASP里边的解决方案,PHP不熟悉,估计也应该有类似设置吧?

以上是关于sqlserver排序的主要内容,如果未能解决你的问题,请参考以下文章

SQLserver排序问题,字段中含有字母、数字、汉字,如何只按数字排序

sqlserver排序规则

sqlserver 修改某张表某字段 排序规则;sqlserver 少量中文 问号?;sqlserver 生僻字;sqlserver 少量中文乱码;sqlserver COLLATE用法;sqlser

sqlserver 排序

sqlserver数据表排序问题

SQLSERVER 修改数据实例的排序规则