Имена переменных с учетом регистра в SQL Server?

Когда я выполняю этот формат команды SQL: SP_HELPTEXT Sproc1 . Набор результатов будет отображать Could not find stored procedure 'SP_HELPTEXT'. Но если я заменю команду SQL строчными буквами, например sp_helptext Sproc1 , она определенно отобразит содержимое Sproc1.

Я использую Sproc1 в своей программе, и когда программа выполнит Sproc1, она вернет сообщение:

Must declare the variable '@Variable1'. 

Хотя я уже объявил эту конкретную переменную.

У меня есть подсказка, что проблема связана с настройками сортировки, с учетом регистра или без учета регистра. Кто-нибудь знает, как решить?


Другая ситуация, когда появляются имена переменных с учетом регистра:

CREATE PROCEDURE Foo @customerID int AS
PRINT @customerId

person RedHat    schedule 11.01.2013    source источник
comment
Итак, другой ли регистр переменных? Я имею в виду, что это может быть просто то, что он не объявлен (в области видимости). Создайте/опубликуйте минимальный тестовый пример, показывающий проблему.   -  person    schedule 11.01.2013
comment
какая сортировка на экземпляре? Используйте ниже tsql, чтобы найти сопоставление? SELECT DATABASEPROPERTYEX('DatabaseName', 'Collation') SQLCollation;   -  person Hiten004    schedule 11.01.2013
comment
@ Hiten004, я предоставил сопоставление выше.   -  person RedHat    schedule 11.01.2013
comment
Измените имя базы данных на свою базу данных!   -  person Hiten004    schedule 11.01.2013
comment
@ Hiten004, см. изменения выше.   -  person RedHat    schedule 11.01.2013
comment
вот более подробная информация о sql_latin1_general_cp1_ci_as. ..... Перенос базы данных из одной сортировки в другую   -  person Hiten004    schedule 11.01.2013


Ответы (1)


У вас есть серверная сортировка с учетом регистра.

Ваша база данных имеет (как вы показали) сортировку без учета регистра, но когда у вас есть проблема с регистром с переменными, важна сортировка сервера.

То же самое касается sp_helptext, которая является хранимой процедурой, определенной в мастере базы данных в нижнем регистре. Поэтому, когда вы вызываете SP_HELPTEXT, он не найден.

Чтобы ваша хранимая процедура работала в режиме сортировки сервера с учетом регистра, вы должны убедиться, что каждая ссылка на переменную @Variable1 именно такая. Не @variable1 или @VARIABLE1.

Используйте это, чтобы проверить, какая у вас сортировка сервера.

SELECT SERVERPROPERTY('collation');

Из электронной документации по SQL Server:

COLLATE (Transact-SQL)

Сопоставление идентификатора зависит от уровня, на котором он определен.

  • Идентификаторы объектов уровня экземпляра, такие как логины и имена баз данных, назначаются по умолчанию для экземпляра.
  • Идентификаторы объектов в базе данных, таких как таблицы, представления и имена столбцов, назначаются для сортировки по умолчанию в базе данных.

    Например, две таблицы с именами, отличающимися только регистром, могут быть созданы в базе данных с сортировкой с учетом регистра, но не могут быть созданы в базе данных с сортировкой без учета регистра. Дополнительные сведения см. в разделе идентификаторы базы данных.

  • Идентификаторы для переменных, меток GOTO, временных хранимых процедур и временных таблиц находятся в сопоставлении по умолчанию экземпляр сервера.

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

Смотрите также

person Mikael Eriksson    schedule 11.01.2013
comment
Сопоставление сервера — Latin1_General_BIN. У меня есть несколько баз данных на моей локальной машине, и я думаю, что очень утомительно изменять каждый триггер и хранимую процедуру. Я не сталкивался с такой проблемой, когда использую 32-разрядную версию Win XP, но теперь я перешел на 64-разрядную ОС Win 7, я просто надеюсь, что это не связано с проблемой. Я хотел бы спросить, есть ли способ изменить параметры сортировки сервера, пожалуйста, помогите. Спасибо. - person RedHat; 11.01.2013
comment
Я могу изменить параметры сортировки сервера, но это непросто. Установить или изменить параметры сортировки сервера - person Mikael Eriksson; 11.01.2013
comment
Несмотря на то, что мой вопрос был закрыт как не по теме, я хотел бы поделиться тем, как я решил проблему, и я хотел бы поблагодарить Микаэля за комментарий, потому что он точно определяет основную причину. Я выполнил шаги по этой ссылке, sp-configure.com /change-sql-server-default-collation - person RedHat; 11.01.2013
comment
Но процесс занял очень много времени, после чего я был вынужден остановить текущий процесс. Я решил удалить SQL Server 2000, перезагрузить машину, а затем снова установить его, и во время установки я выбрал правильную сортировку сервера. Системные хранимые процедуры (Transact-SQL) теперь работают нормально, независимо от того, были ли они введены и выполняются в нижнем или верхнем регистре. - person RedHat; 11.01.2013
comment
@Alex, приятно слышать, что вы решили проблему. Мой голос за закрытие был голосованием за то, чтобы переместить вопрос в DBA, где ваш вопрос увидел бы больше экспертов в этом отношении, чем я могу предоставить и, возможно, вы бы получили другой / лучший совет там. - person Mikael Eriksson; 11.01.2013
comment
Спасибо и нет проблем. - person RedHat; 11.01.2013