我有一个带有多个数据库的SQL Server。我希望其中一个数据库对变量名称大小写敏感,而其他数据库则不敏感。
我需要更改设置,以便我可以在没有错误的情况下运行此脚本。
DECLARE @A int
DECLARE @a int
如何将一个数据库的变量名区分大小写,同时允许实例中的其他数据库的变量名不区分大小写?
我有一个带有多个数据库的SQL Server。我希望其中一个数据库对变量名称大小写敏感,而其他数据库则不敏感。
我需要更改设置,以便我可以在没有错误的情况下运行此脚本。
DECLARE @A int
DECLARE @a int
如何将一个数据库的变量名区分大小写,同时允许实例中的其他数据库的变量名不区分大小写?
为了获得所需的行为,您需要将服务器排序更改为区分大小写。仅更改数据库的排序不足够。
SQL Server安装的默认排序方式SQL_Latin1_General_CP1_CI_AS
不区分大小写。
看起来您想要修改您的服务器的排序方式为不区分大小写的一种。选择一个带有_CS
的排序方式。_CI
表示“不区分大小写”,而区分大小写则是_CS
。也许您会想要使用Latin1_General_CS_AS
。
这是对此前问题的极好回答:Changing SQL Server collation to case insensitive from case sensitive?。
COLLATE (Transact-SQL)
标识符的排序方式取决于其定义的级别。
- 实例级对象(如登录和数据库名称)的标识符被分配为该实例的默认排序方式。
数据库内的对象(如表、视图和列名)的标识符被分配为该数据库的默认排序方式。
例如,在具有区分大小写排序的数据库中,可能会创建仅在大小写上不同的两个表,但不可能在具有不区分大小写排序的数据库中创建这些表。有关更多信息,请参见Database Identifiers。
变量、GOTO标签、临时存储过程和临时表的标识符位于服务器实例的默认排序方式中。
当连接上下文与一个数据库相关联并创建变量、GOTO标签、临时存储过程和临时表时,可以在上下文已切换到另一个数据库后引用这些对象。
您可以使用以下命令检查您的服务器排序方式:
SELECT SERVERPROPERTY('collation');
SQL_Latin1_General_CP1_CI_AS
(1 row(s) affected)