Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 查找SQL Server中所有表的非默认排序规则列_Sql Server_Sql Server 2005 - Fatal编程技术网

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

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

是否有脚本可用于查找SQL目录中所有表中没有排序规则的所有列

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

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

在此处尝试此脚本:

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')