我有一个区分大小写的SERVER(SQL_Latin1_General_CP1_CS_AS)但数据库不区分大小写(SQL_Latin1_General_CP1_CI_AS)。
如果我尝试在数据库上创建以下存储过程,则会收到错误“必须声明标量变量”@test“。”
CREATE PROCEDURE [dbo].[sp_Test] (@TEST int) as
begin
SELECT @test
end
GO
但正如我所说,数据库本身并不区分大小写。我假设这是在某处记录的存储过程遵循服务器的敏感性但我无法在任何地方找到引用。任何人都可以指出我会在哪里找到一些关于此的文档吗? (是的,我试过谷歌,但我找不到任何东西)
答案 0 :(得分:4)
你是对的。数据库排序规则不控制变量名称区分大小写 - 服务器排序规则。
任何其他对象名称(例如表格,视图,列)都遵循数据库排序规则。在您的情况下,这意味着案例不敏感,因为您的数据库是 CI
(不区分大小写)。
COLLATE (Transact-SQL)
标识符的整理取决于其定义的级别。
- 为实例级对象的标识符(例如登录名和数据库名)分配实例的默认排序规则。
数据库中对象的标识符(例如表,视图和列名)将分配数据库的默认排序规则。
例如,可以在具有区分大小写的排序规则的数据库中创建两个名称仅在大小写不同的表,但可能不会在具有不区分大小写的排序规则的数据库中创建。有关详细信息,请参阅Database Identifiers。
变量, GOTO标签,临时存储过程和临时表的标识符为在服务器实例的默认排序规则中。
当连接上下文与一个数据库关联时,可以创建变量,GOTO标签,临时存储过程和临时表,然后在将上下文切换到另一个数据库时引用。
您可以使用以下方式检查服务器整理:
SELECT SERVERPROPERTY('collation');
SQL_Latin1_General_CP1_CI_AS
(1 row(s) affected)