Как получить чувствительную к регистру версию сопоставления в SQL Server?
Есть ли способ получить чувствительную к регистру версию сопоставления для использования в запросе?
Предположим, что запрос может использоваться в базах данных с разными параметрами сортировки, некоторые из которых нечувствительны к регистру и могут иметь разные культуры. (например, несколько клиентов)
Однако этот запрос должен всегда вести себя с учетом регистра, при этом, по возможности, не изменяя культуру сопоставления и другие свойства.
Например, если БД использует SQL_Latin1_General_CP1_CI_AS (CI здесь означает «без учета регистра»), я хотел бы использовать SQL_Latin1_General_CP1_CS_AS («CS» с учетом регистра).
Упрощенный пример запроса:
DECLARE @Title nvarchar(2) = 'qQ'
--Case insensitive (following DB collation)
SELECT REPLACE(@Title, 'q', 'o') --Result: 'oo'
--Case sensitive, but fixed to a collation
SELECT REPLACE(@Title COLLATE SQL_Latin1_General_CP1_CS_AS, 'q', 'o') --Result: 'oQ'
Подобное сопоставление в запросе может привести к проблемам при переносе кода или изменении параметров сортировки БД на более позднюю дату.
Есть ли встроенная функция для получения чувствительной к регистру версии текущей сортировки или обходной путь, который можно использовать для этого?