SQL Server 存储过程区分大小写?

Kyl*_*yle 4 sql-server stored-procedures

我有一个区分大小写的服务器 (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
Run Code Online (Sandbox Code Playgroud)

但正如我所说,数据库本身不区分大小写。我假设这被记录在某个地方,存储过程遵循服务器的敏感性,但我在任何地方都找不到参考。谁能指出我在哪里可以找到有关此的一些文档?(是的,我试过谷歌,但我没有找到任何东西)

mar*_*lek 5

你是对的。数据库整理不控制变量名称区分大小写 -服务器整理可以。

任何其他对象名称(例如表、视图、列)都遵循数据库整理规则。在您的情况下,这意味着不区分大小写,因为您的数据库CI不区分大小写)。

来自SQL Server 联机丛书

整理 (Transact-SQL)

标识符的归类取决于定义它的级别。

  • 实例级对象的标识符(例如登录名和数据库名称)分配有实例的默认排序规则。
  • 数据库中对象的标识符(例如表、视图和列名)被分配了数据库的默认排序规则。

    例如,名称仅大小写不同的两个表可以在区分大小写的数据库中创建,但不能在不区分大小写的数据库中创建。有关更多信息,请参阅数据库标识符

  • 变量GOTO 标签临时存储过程临时表的标识符在服务器实例的默认排序规则中。

    当连接上下文与一个数据库相关联时,可以创建变量、GOTO 标签、临时存储过程和临时表,然后在上下文切换到另一个数据库时引用。

您可以使用以下方法检查服务器排序规则:

SELECT SERVERPROPERTY('collation');

SQL_Latin1_General_CP1_CI_AS
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)

也可以看看