服务器级别的归类导致数据库过程中区分大小写的问题

Dr *_*ick 2 sql-server collation

我正在将数据库安装到客户端的服务器上.在服务器上设置的排序规则是SQL_Latin1_General_CP1_CS_AS,因此它区分大小写.

我正在安装的数据库使用排序规则级别SQL_Latin1_General_CP1_CI_AS,因此它不区分大小写.

我现在遇到的问题是存储过程中的所有变量必须区分大小写,否则会引发错误.

例:

Declare @Dimension varchar(45)
Set @dimension = 'Test'
Run Code Online (Sandbox Code Playgroud)

错误:

Must declare the scalar variable "@dimension".
Run Code Online (Sandbox Code Playgroud)

@dimension变量中的小写"d"使其被识别为完全不同的变量.

我可以更新数据库中的设置以忽略服务器的排序规则吗?

注意:我获得了在服务器级别更新排序规则的权限,因为它是测试服务器.但是,这是一个更复杂的过程.我正在寻找一种解决方法,而无需通过此链接中的步骤:

  • 确保您拥有重新创建用户数据库及其中所有对象所需的所有信息或脚本.
  • 使用bcp Utility等工具导出所有数据.有关详细信息,请参阅批量导入和导出数据(SQL Server).
  • 删除所有用户数据库.
  • 重建master数据库,在setup命令的SQLCOLLATION属性中指定新的排序规则.例如:
  • Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName
    /SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ]
    /SQLCOLLATION=CollationName
  • 创建所有数据库及其中的所有对象.
  • 导入所有数据.

谢谢

Dav*_*oft 5

要解决此问题,请将数据库设置为" 部分包含".这将为您提供Contained Database Collat​​ion,它提供:

由于包含数据库的设计目标是使它们自包含,因此必须切断对实例和tempdb排序规则的依赖性.为此,包含的数据库引入了目录排序规则的概念.目录归类用于系统元数据和临时对象.

在包含的数据库中,目录排序规则Latin1_General_100_CI_AS_WS_KS_SC.对于所有SQL Server实例上的所有包含的数据库,此排序规则相同,并且无法更改.