在SQL Server中的所有表的列上查找非默认排序规则

Rip*_*ppo 28 sql-server sql-server-2005

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

我接管了一个遗留系统,并在一些表中有不同的排序规则,我想在一次点击中找到所有实例,而不是手动完成.

但是我不想以编程方式更改排序规则,因为我希望逐个查看每个表.

在此输入图像描述

mar*_*c_s 71

在这里试试这个脚本:

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
Run Code Online (Sandbox Code Playgroud)

它检查数据库默认排序规则,然后查找不符合该排序规则的任何列.

  • 如果要更改它们,还可以添加一个额外的列来生成alter table脚本(尽管这可能需要删除并重新创建引用字段被更改的索引)'ALTER TABLE ['+ t.Name +'] ALTER COLUMN [ '+ c.Name +']'+ ty.name +'('+ convert(varchar(16),c.max_length)+')'+'COLLATE'+ @ DatabaseCollat​​ion + CASE WHEN c.is_nullable = 1 THEN''ELSE 'NOT NULL'END +';' (3认同)