Чувствителни към главни и малки букви имена на променливи в 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. Имам множество бази данни в моята локална машина и мисля, че е много досадно да променям всеки тригер и съхранена процедура. Не съм срещал такъв проблем, когато използвам Win XP 32 bit, но сега мигрирах към Win 7 64 bit OS, просто се надявам, че не е свързан с проблема. Бих искал да попитам дали има начин как да променя сортирането на сървъра, моля, помогнете. Благодаря. - 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