Sql server 获取列的不区分大小写的排序规则

Sql server 获取列的不区分大小写的排序规则,sql-server,collation,Sql Server,Collation,我需要在SQL Server中执行不区分大小写的查询。这可以通过将所有内容转换为大写或小写来实现: SELECT id FROM Persons WHERE UPPER(name) = UPPER(@name) 表示使用collate可以大大提高效率: SELECT id FROM Persons WHERE name = @name collate SQL_Latin1_General_CP1_CI_AS 但是,正如前面所指出的,上面的查询假设列的原始排序规则是Latin1兼容的,如果将来

我需要在SQL Server中执行不区分大小写的查询。这可以通过将所有内容转换为大写或小写来实现:

SELECT id
FROM Persons
WHERE UPPER(name) = UPPER(@name)
表示使用
collate
可以大大提高效率:

SELECT id
FROM Persons
WHERE name = @name collate SQL_Latin1_General_CP1_CI_AS
但是,正如前面所指出的,上面的查询假设列的原始排序规则是Latin1兼容的,如果将来更改列的排序规则,则可能会中断

有没有办法强制表达式使用列的当前排序规则的不区分大小写的版本,不管它是什么?一厢情愿地:

SELECT id
FROM Persons
WHERE name = @name collate *_CI

我知道这可以通过使用动态SQL来实现,但我不希望这样做。

99%的SQL server安装不区分大小写。因此,更好的选择是执行规范,然后在可能需要的少数情况下通过显式排序应用区分大小写。(事实上,我见过的唯一一个SQL Server安装不是不区分大小写的,它们的设置是错误的)…而且,没有动态的TSQL@MitchWheat:这也是我的经验,但在测试时,我在Stack Exchange Data Explorer上遇到了区分大小写的列。我不想被固定的CI排序规则绑定,因为堆栈溢出可能会在将来更改它们的排序规则。上(x)=上(y)目前似乎是最简单的解决方案。SEDE是什么?你是说Stack Exchange数据库使用区分大小写的排序规则吗?那将是一次失败!如果您已在本地还原,则始终可以更改它:是的,我编辑了我的注释以扩展首字母缩略词。我以前的查询不返回结果,但它返回结果。(从那时起,我就开始将所有内容转换为小写。)