我需要在SQL Server中执行不区分大小写的查询。通过将所有内容转换为大写或小写,可以轻松实现这一目标:
SELECT id
FROM Persons
WHERE UPPER(name) = UPPER(@name)
This answer表示使用collate
可以大大提高效率:
SELECT id
FROM Persons
WHERE name = @name collate SQL_Latin1_General_CP1_CI_AS
但是,正如by gbn指出的那样,上面的查询假设列的原始排序规则与Latin1兼容,如果将来更改列的排序规则,则可能会中断。
有没有办法强制表达式使用列的当前排序规则的不区分大小写的版本,无论它发生什么?一厢情愿:
SELECT id
FROM Persons
WHERE name = @name collate *_CI
我知道这可以使用动态SQL实现,但不希望沿着那条路走下去。