最近在维护一个SQL Server数据库中发现一个问题。
nvarchar(MAX)存入中文时,显示为???乱码。
google了一番,将字段类型改成了ntext,存中文便没了问题。(这个改法其实是有问题的,后来一番google得知,ntext已经被遗弃不用了,都推荐使用nvarchar(MAX)了,但是为什么nvarchar(MAX)存入中文会显示???乱码,这个作为一个问题以后再研究)
但是该字段被改成了ntext后,造成了其他一些业务逻辑上的问题。
一番跟踪后,发现是一个Store Procedure用了如下语句做判断:
IF((SELECT SettingValue FROM bvc_WebSettings WHERE SettingName = 'xxx') = 1)
其中SettingValue正是被我改为ntext类型的字段。
字段类型改为ntext后,这个if里的语法就有问题了,原因是ntext不能直接和integer做比较。
需要更改为:
IF cast((SELECT SettingValue FROM bvc_WebAppSetting WHERE SettingName = 'xxx') as nvarchar(max)) = 1