【问题标题】:SQL Stored Proc Collation ContextSQL 存储过程排序规则上下文
【发布时间】:2010-09-25 21:56:40
【问题描述】:

嘿,我遇到了一个似乎与排序规则有关的问题,但我不确定。

我正在针对我的生产数据库的备份进行开发。 SQL Server 2005 环境中的唯一区别(我现在知道)是我的本地主机具有“SQL_Latin1_General_CP1_CS_AS”(区分大小写)作为排序规则,而生产环境具有“SQL_Latin1_General_CP1_CI_AS”(不区分大小写)。

当我在本地执行存储过程时,它正在抛出 “必须声明标量变量“@firstName””错误。

变量“@FirstName”被声明。

现在,数据库本身是“SQL_Latin1_General_CP1_CI_AS”作为排序规则,那么为什么存储过程没有在不区分大小写的上下文中运行?

我在网上查了一下,他们基本上说我必须重建我的 SQLserver。

数据库上下文不应该胜过服务器上下文进行排序吗?

顺便说一句,master 和 tempdb 都是“SQL_Latin1_General_CP1_CS_AS”区分大小写的。

【问题讨论】:

    标签: sql-server-2005 collation


    【解决方案1】:

    这是一种糟糕的情况。当您尝试执行任何涉及 varchars 的操作时,您无法控制排序规则的任何事情(例如 SELECT INTO 临时表)都会中断。服务器默认排序规则将胜过您未明确强制排序规则的任何内容,这将是您现有存储过程代码的大部分(如果不是全部)。

    此问题的正常解决方案是使用正确的排序规则重新安装 SQL Server 实例。是的,您确实需要这样做。我对此的了解是二手的,但我了解(从获得 MS 技术支持参与此问题的人那里)在技术上可以更改 SQL Server 实例上的默认排序规则,但该过程是技术性的并且容易出错,并且一个错误可能会使服务器处于无法使用的状态。显然,此过程不受 Microsoft 官方支持,建议的过程是重新安装 SQL Server 实例。

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      相关资源
      最近更新 更多