【问题标题】:SQL Server stored procedure case sensitive?SQL Server 存储过程区分大小写?
【发布时间】:2010-11-26 20:38:59
【问题描述】:

我有一个区分大小写的 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

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

【问题讨论】:

    标签: sql-server stored-procedures


    【解决方案1】:

    你是对的。数据库排序规则不控制变量名称是否区分大小写 - 服务器 排序规则可以。

    任何其他对象名称(例如表、视图、列)都遵循 数据库 排序规则。在您的情况下,这意味着 不区分大小写,因为您的数据库是 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)
    

    另见

    【讨论】:

    • 感谢您的确认。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2014-08-19
    • 2016-09-30
    • 1970-01-01
    • 2012-04-17
    • 2011-03-24
    • 2014-05-10
    相关资源
    最近更新 更多