Как удалить регистрозависимую проверку в SQL Server 2008? - PullRequest
8 голосов
/ 07 июля 2010

Я только что установил SQL Server 2008 и импортировал базу данных AdventureWorksDatabase (для SQL 2005, как и для 2008, который не работал).

Теперь принудительно вводится чувствительность к регистру при поиске любых таблиц, представлений и т. Д. Следовательно, таблица Person.contact при записи выдает ошибку неверного имени столбца, но при записи Person.Contact показывает все строки.*

Кроме того, intellisense тоже не очень хорошо работает.

Ответы [ 2 ]

12 голосов
/ 07 июля 2010

Чувствительность к регистру контролируется сличением, используемым базой данных - проверьте это, запросив представления системного каталога:

select name, collation_name 
from sys.databases

Имя сопоставления будет выглядеть примерно так: Latin1_General_CI_AS

Часть _CI_ говорит мне здесь, что это регистр без учета регистра. Если вы видите _CS_, значит сопоставление регистров .

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

ALTER DATABASE AdventureWorks COLLATE ....... 

и выберите любое правильное сопоставление здесь - используйте одно с _CI_, чтобы получить регистр без учета регистра.

Проблема в том, что даже если вы измените параметры сортировки на уровне базы данных, в некоторых таблицах все еще может быть отдельный столбец, для которого при создании таблицы был определен определенный параметр сортировки. Вы также можете изменить все это, но это будет более масштабное мероприятие. См. эту статью для получения дополнительной информации и сценария для проверки и, возможно, изменения отдельных столбцов в ваших таблицах.

Причина, по которой intellisense может не работать должным образом, заключается в том, что чувствительность к регистру объектов базы данных сама по себе контролируется параметрами сортировки сервера, что может снова отличаться от значения по умолчанию для любой базы данных.

Чтобы узнать, какова сортировка сервера, используйте:

SELECT SERVERPROPERTY('Collation')

Изменение системной сортировки сервера является довольно запутанным процессом и требует использования оригинального setup.exe, как объяснено здесь 1032 *.

2 голосов
/ 19 августа 2015

Проблема здесь в чувствительности к регистру имени таблицы Контакт. Вы должны установить collation_name базы данных AdventureWorks как Latin1_General_CI_AS

Проверка для collation_name:

SELECT name, collation_name
FROM sys.databases
WHERE name = 'AdventureWorks';
GO

Если collation_name равен Latin1_General_BIN или Latin1_General_CS_AS, измените его на Latin1_General_CI_AS

ALTER DATABASE AdventureWorks
COLLATE Latin1_General_CI_AS ;
GO

Если база данных заблокирована для выполнения этого действия «База данных не может быть заблокирована исключительно для выполнения операции.» . Измените базу данных на одного пользователя

ALTER DATABASE AdventureWorks SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

и сделать

ALTER DATABASE AdventureWorks
COLLATE Latin1_General_CI_AS ;
GO

Наконец, верните базу данных многопользовательскому

ALTER DATABASE AdventureWorks SET MULTI_USER WITH ROLLBACK IMMEDIATE

или

Вы можете изменить параметры сортировки в свойствах базы данных.

enter image description here

...