2011-12-13 35 views
26

是否有可用于查找没有排序规则的SQL目录中的所有表中的所有列的脚本<database default>查找SQL Server中所有表的列的非默认排序规则

我已经接管了遗留系统,并且在一些表中有不同的排序规则,我希望能够在一次搜索中找到所有实例,而不是手动执行。

但是我不想以编程方式更改排序规则,因为我想逐一检查每个表。

enter image description here

回答

64

这里试试这个脚本:

DECLARE @DatabaseCollation VARCHAR(100) 

SELECT 
    @DatabaseCollation = collation_name 
FROM 
    sys.databases 
WHERE 
    database_id = DB_ID() 

SELECT 
    @DatabaseCollation 'Default database collation' 

SELECT 
    t.Name 'Table Name', 
    c.name 'Col Name', 
    ty.name 'Type Name', 
    c.max_length, 
    c.collation_name, 
    c.is_nullable 
FROM 
    sys.columns c 
INNER JOIN 
    sys.tables t ON c.object_id = t.object_id 
INNER JOIN 
    sys.types ty ON c.system_type_id = ty.system_type_id  
WHERE 
    t.is_ms_shipped = 0 
    AND 
    c.collation_name <> @DatabaseCollation 

它检查数据库的默认排序规则,然后发现不符合任何列。

+1

现货,非常感谢。将尽快接受这个答案作为“5分钟”结束! – Rippo

+0

谢谢,救了我很多时间:) – Pking

+0

很好的答案,我认为有一个小错误。如果数据库具有自定义类型,则system_type_id上​​的联接可以创建重复结果。我认为连接实际上应该在user_type_id上​​。 – PeteT

相关问题