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

时间:2018-01-30 19:27:34

标签: sql-server collation

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

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

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

示例:

Declare @Dimension varchar(45)
Set @dimension = 'Test'

错误:

Must declare the scalar variable "@dimension".

小写" d"在@dimension变量中,它被识别为一个完全不同的变量。

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

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

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

谢谢

2 个答案:

答案 0 :(得分:5)

要解决此问题,请将数据库设置为Partially Contained。这将为您提供Contained Database Collation,其中提供:

  

由于包含数据库的设计目标是制作它们   自包含,对实例和tempdb排序的依赖   必须被切断。为此,包含的数据库引入了这个概念   目录整理。目录排序规则用于系统   元数据和瞬态对象。

     

在包含的数据库中,目录排序规则   Latin1_General_100_CI_AS_WS_KS_SC。这种整理对所有人来说都是一样的   包含所有SQL Server实例的数据库,但不能   改变。

答案 1 :(得分:1)

根据经验,更快的方法是备份所有数据库,然后使用正确的排序规则重新安装sql-server,然后恢复所有数据库。可能是权限的手动内容,但可以有其他选项。