SQL存储过程归类上下文

时间:2008-12-08 18:55:28

标签: sql-server-2005 collation

嘿,我有一个似乎与整理有关的问题,但我不确定。

我正在开发我的生产数据库的备份。 SQL Server 2005环境(我现在才知道)的唯一区别是我的localhost具有“SQL_Latin1_General_CP1_CS_AS”(区分大小写)作为排序规则,生产环境具有“SQL_Latin1_General_CP1_CI_AS”(不区分大小写)。

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

已声明变量“@FirstName”

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

我在网上看过这个,他们基本上说我必须重建我的SQLserver。

数据库上下文是否应该优先于服务器上下文进行整理?

BTW,master和tempdb都是“SQL_Latin1_General_CP1_CS_AS”区分大小写。

1 个答案:

答案 0 :(得分:1)

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

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