我该如何获得数据库中特定表的排序规则?

17

我如何获取数据库中特定表的排序规则(collation)?一个表是否可能在数据库中具有不同的排序规则(collation)?

3个回答

36
表级别的排序是基于每个列进行的,因此可以有与数据库不同的排序方式。如果在列级别未定义排序规则,则默认使用数据库排序规则。
SQL Server 2000:
SELECT c.name, 
       c.collation 
  FROM SYSCOLUMNS c
 WHERE [id] = OBJECT_ID('your_table_name')

SQL Server 2005+:

SELECT c.name, 
       c.collation_name
  FROM SYS.COLUMNS c
  JOIN SYS.TABLES t ON t.object_id = c.object_id
 WHERE t.name = 'your_table_name'

3
如果您使用模式INFORMATION_SCHEMA而不是模式sys,后一种情况甚至可以更简单(无需连接或对象ID)。您将获得以下查询语句:SELECT COLUMN_NAME, COLLATION_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'your_table_name' - Jeppe Stig Nielsen
抱歉,上面的评论仅适用于SQL Server 2012及更高版本,显然当时回答时还没有这个版本,但我猜现在大多数人都在使用它,所以该评论仍然有用。 - Jeppe Stig Nielsen
@OMG Ponies,如果数据库中使用的是'CS'而不是"CI",则SQL命令应该以小写形式编写。SYS.COLUMNS应改为sys.columns,SYS.TABLES应改为sys.tables。 - antonio

3

对于表而言,不存在所谓的排序。

数据库有一个默认排序(默认情况下是服务器的排序方式)。

无论您添加到表中的列是什么,都将应用数据库的默认排序,除非您在列级别显式地指定了一种排序方式。


2
我该如何获取此列级别的排序规则? - masoud ramezani
1
SELECT c.name, c.collation_name FROM SYS.COLUMNS c JOIN SYS.TABLES t ON t.object_id = c.object_id WHERE t.name = 'MyTable' and c.name = 'MyColumn' - user2046211
如果我有错,请原谅。但我还是看不到它,可能是我太糊涂了。当然很接近了,但用户要求特定的列?我只是添加了where子句。 - user2046211

0

仅作为一点注意事项。SSMS可以在脚本化表时显示列排序规则。您可以进入“工具”->“选项”。在SQL Server对象资源管理器->脚本化下,有一个选项可以在脚本化表时显示排序规则。您可以暂时打开此选项并脚本化一个表以查看包括列排序规则的表创建代码。


它被称为包括排序并且位于表和视图选项下。谢谢! - katalin_2003

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接