2009-09-09 14 views
3

У меня есть чувствительный к регистру СЕРВЕР (SQL_Latin1_General_CP1_CS_AS), но база данных нечувствительна к регистру (SQL_Latin1_General_CP1_CI_AS).Сбой хранимой процедуры SQL Server?

Если я попытаюсь создать следующую хранимую процедуру в базе данных, я получаю сообщение об ошибке «Должен объявить скалярную переменную @test».

CREATE PROCEDURE [dbo].[sp_Test] (@TEST int) as 
begin 
    SELECT @test 
end 
GO 

Но, как я уже сказал, база данных не чувствительна к регистру. Я предполагаю, что это где-то документировано, что хранимые процедуры соответствуют чувствительности сервера, но я не могу найти ссылку где-нибудь. Может ли кто-нибудь указать мне, где я найду несколько документов об этом? (Да, я попробовал Google, но я ничего не нашел)

ответ

4

Вы правы. Сопоставление базы данных не контролирует переменные имя регистр чувствительности - сервер сопоставление.

Любое другое имя объекта (например, таблица, вид, столбец) следует база данных правила сортировки. В вашей ситуации это значит случай нечувствительный, так как ваша база данных CI (не чувствителен к регистру).

От SQL Server Books Online:

COLLATE (Transact-SQL)

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

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

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

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

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

Вы можете проверить ваш сервер сверку с помощью:

SELECT SERVERPROPERTY('collation'); 

SQL_Latin1_General_CP1_CI_AS 
(1 row(s) affected) 

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

+0

Благодарим за подтверждение. – Kyle

Смежные вопросы