由生僻字引发的修改SQL Server 的排序规则思考

时间:2022-01-17 00:48:32

背景:SQL Server 2008 R2的默认实例为【Chinese_PRC_CI_AS】,这个排序规则不支持生僻字“”等的排序(会将生僻字放在第一条),所以需修改为【Chinese_Simplified_Pinyin_100_CI_AS】。

1、右键库,选择选项--排序规则。

由生僻字引发的修改SQL Server 的排序规则思考由生僻字引发的修改SQL Server 的排序规则思考由生僻字引发的修改SQL Server 的排序规则思考

确定即可(其实所做的操作相当于sql脚本):

ALTER DATABASE [数据库名称] COLLATE   Chinese_Simplified_Pinyin_100_CI_AS

2、确定执行脚本时可能出现库依赖问题:

由生僻字引发的修改SQL Server 的排序规则思考

解决思路方案如下:

先备份依赖,然后删除依赖,执行更改规则的脚本后再添加依赖

---先删除依赖:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fn_Birthday]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
BEGIN
drop function fn_Birthday
END

--后添加上去:
GO
/*****************************************************************
**功能:计算指定年份的生日
**返回:日期
******************************************************************/
CREATE FUNCTION fn_Birthday(@intYear int,@dtmBirthday datetime)
RETURNS datetime
WITH SCHEMABINDING
AS
BEGIN

RETURN case when isdate( convert(varchar(4),@intYear)+'-'+convert(varchar(2),month(@dtmBirthday))+'-'+convert(varchar(2),day(@dtmBirthday)) )=1
then convert(datetime,convert(varchar(4),@intYear)+'-'+convert(varchar(2),month(@dtmBirthday))+'-'+convert(varchar(2),day(@dtmBirthday)) ) else null end

END

GO