怎么让SQL SERVER 2008R2不要区分大小写?

时间:2022-06-01 17:04:13
我自己的数据库2008R2默认是不区分大小写的,排序规则chinese_prc_ci_as,

现在附加到一个新数据库服务器上去,都变成区分大小写了,搞得好多存储过程都不能运行了,因为当时写程序没有在意这点,就同一个变量名,有时大写有时小写;

有什么办法能不修改这些存储过程里的变量,能让软件跳过这些检测运行起来?

修改变量工程量太大了。

6 个解决方案

#1


试一下这个
alter database 数据库名称 collate Chinese_PRC_CI_AS

#2


引用 1 楼 sinat_28984567 的回复:
试一下这个
alter database 数据库名称 collate Chinese_PRC_CI_AS

执行这句没用,随便打开一个以前有大小写变量没区分的存储过程,都报错。

#3


要完全正常, 要修正实例的排序规则, 这个过程也比较麻烦。

重新安装一个 SQL Server2014 吧,设置好之后原来的SQL Server2008 服务停掉。 
https://blog.csdn.net/yenange/article/details/50549937

安装时注意别把排序规则再搞错了。保证是: Chinese_PRC_CI_AS

#4


\妥妥的解决广寒确实是要改实例排序规则 

#5


这个服务器上还有其他ERP和管理软件在用,不是说换就换的啊;所以才这么郁闷;
唉,看来只能一个一个的改存储过程的变量了,吸取教训,以后SQL 脚本也要注重大小写了。

#6


写一个函数吧
Create FUNCTION [IsTheSame]
(@Text1 AS Text,
@Text2 AS Text
)
RETURNS bit  AS  
BEGIN 
declare @TmpChar1 varchar(10)
declare @TmpChar2 varchar(10)
DECLARE @i int
set @i=1
while @i<=datalength(@Text1)
begin
set @TmpChar1=substring(@Text1,@i,1)
set @TmpChar2=substring(@Text2,@i,1)
if ASCII(@TmpChar1)<>ASCII(@TmpChar2)
begin
return 1
end
set @i=@i+1
end

RETURN 0
END

亲测有效 0表示相同,1表示不同

#1


试一下这个
alter database 数据库名称 collate Chinese_PRC_CI_AS

#2


引用 1 楼 sinat_28984567 的回复:
试一下这个
alter database 数据库名称 collate Chinese_PRC_CI_AS

执行这句没用,随便打开一个以前有大小写变量没区分的存储过程,都报错。

#3


要完全正常, 要修正实例的排序规则, 这个过程也比较麻烦。

重新安装一个 SQL Server2014 吧,设置好之后原来的SQL Server2008 服务停掉。 
https://blog.csdn.net/yenange/article/details/50549937

安装时注意别把排序规则再搞错了。保证是: Chinese_PRC_CI_AS

#4


\妥妥的解决广寒确实是要改实例排序规则 

#5


这个服务器上还有其他ERP和管理软件在用,不是说换就换的啊;所以才这么郁闷;
唉,看来只能一个一个的改存储过程的变量了,吸取教训,以后SQL 脚本也要注重大小写了。

#6


写一个函数吧
Create FUNCTION [IsTheSame]
(@Text1 AS Text,
@Text2 AS Text
)
RETURNS bit  AS  
BEGIN 
declare @TmpChar1 varchar(10)
declare @TmpChar2 varchar(10)
DECLARE @i int
set @i=1
while @i<=datalength(@Text1)
begin
set @TmpChar1=substring(@Text1,@i,1)
set @TmpChar2=substring(@Text2,@i,1)
if ASCII(@TmpChar1)<>ASCII(@TmpChar2)
begin
return 1
end
set @i=@i+1
end

RETURN 0
END

亲测有效 0表示相同,1表示不同