Sql server 查找SQL Server中所有表的非默认排序规则列
是否有脚本可用于查找SQL目录中所有表中没有排序规则的所有列 我已经接管了一个遗留系统,在一些表中有不同的排序规则,我希望在一次命中中找到所有实例,而不是手动执行 但是,我不想以编程方式更改排序规则,因为我希望逐个检查每个表 在此处尝试此脚本:Sql server 查找SQL Server中所有表的非默认排序规则列,sql-server,sql-server-2005,Sql Server,Sql Server 2005,是否有脚本可用于查找SQL目录中所有表中没有排序规则的所有列 我已经接管了一个遗留系统,在一些表中有不同的排序规则,我希望在一次命中中找到所有实例,而不是手动执行 但是,我不想以编程方式更改排序规则,因为我希望逐个检查每个表 在此处尝试此脚本: DECLARE @DatabaseCollation VARCHAR(100) SELECT @DatabaseCollation = collation_name FROM sys.databases WHERE da
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
DECLARE@DatabaseCollation VARCHAR(100)
挑选
@DatabaseCollation=排序规则\名称
从…起
sys.databases
哪里
数据库\u id=DB\u id()
挑选
@数据库排序规则“默认数据库排序规则”
挑选
t、 名称“表名”,
c、 名称“Col name”,
ty.name“Type name”,
c、 最大长度,
c、 排序规则名称,
c、 _可为空吗
从…起
sys.c列
内连接
c.object\u id=t.object\u id上的sys.tables t
内连接
c.system\u type\u id=ty.system\u type\u id上的sys.types ty
哪里
t、 是否已装运物料=0
及
c、 排序规则\u name@DatabaseCollation
它会检查数据库的默认排序规则,然后找到任何不符合该规则的列。请注意,非常感谢。只要“5分钟”结束,我们就会接受这个答案!谢谢,节省了我很多时间:)回答得很好,不过我觉得有个小错误。如果数据库具有自定义类型,则system_type_id上的联接可以创建重复的结果。我认为连接实际上应该在user_type_id上。如果您想更改alter table脚本(尽管这可能需要删除并重新创建引用正在更改的字段的索引),“alter table['+t.Name+']alter column['+c.Name+']'+ty.Name+'('+convert(varchar(16),c.max_length)+“)”+“COLLATE”+@DatabaseCollation+大小写当c.is_nullable=1时,则“ELSE”不为NULL“END+”;”注意:只需一个
selectdatabasepropertyex('MyDatabase','Collation')