Как запросить базу данных для чувствительных к регистру значений - PullRequest
1 голос
/ 22 января 2011

Я проверяю несколько значений в моей базе данных, и кажется, что сравниваемые строки не вводятся с учетом регистра.Я использую C # и LINQ to SQL.

Ответы [ 3 ]

2 голосов
/ 22 января 2011

Вам не нужно изменять базу данных, вы можете изменить свои запросы, чтобы они работали с учетом регистра:

SET NOCOUNT ON
declare @curdb sysname; select  @curdb =  db_name(0);
select  DATABASEPROPERTYEX(@curdb, 'Collation') Collation;

if object_id('test_CI', 'U') is not null
    drop table test_CI
go

create table test_CI (
    val varchar(10)
    );
go
insert into test_CI values ('TEST');    
insert into test_CI values ('Test');    
insert into test_CI values ('test');    

-- 
select * from test_CI where val = 'Test';

select * from test_CI where val collate Latin1_General_CS_AS = 'Test';

Просто используйте текущий порядок сортировки и замените CI на CS.

1 голос
/ 22 января 2011

В SQL Server то, является ли столбец чувствительным к регистру или нет, зависит от того, какое сопоставление вы применили к нему.

Параметры сортировки по умолчанию, вероятно, "SQL_Latin1_General_CP1_CI_AS" (CI "нечувствителен к регистру"). Если вы измените схему базы данных таким образом, чтобы вместо столбца использовалось сопоставление «SQL_Latin1_General_CP1_CS_AS», тогда запросы к нему будут чувствительными к регистру.

0 голосов
/ 22 января 2011

Проверьте приведенную здесь матрицу сопоставления:

http://msdn.microsoft.com/en-us/library/ms144250.aspx

Я думаю, вам понадобится что-то вроде SQL_Latin1_General_Cp437_CS_AS_KI_WI

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...