我在SQL2005中执行CHAR(ASCII(SUBSTRING('SYSTEM', 1, 1))+128)的时候返回的是?,但是在SQL2008中返回的是NULL,我试过用ISNULL去执行的时候,发现05下的值不是NULL值,这个问题导致我一个函数里最终返回值的差异,在05下能正确返回值,而在08下返回的就是NULL,我试过在08下加成IsNull(CHAR(ASCII(SUBSTRING('SYSTEM', 1, 1))+128),‘?’),发现返回的就变成都是?了,和05下返回的不一样,烦请各位大大释疑下,

------解决方案--------------------
就我的理解 我认为这个与SQL SERVER的三值逻辑有关系
CHAR(ASCII(SUBSTRING('SYSTEM', 1, 1))+128)=NULL
和
CHAR(ASCII(SUBSTRING('SYSTEM', 1, 1))+128) is null
是不一样的
至于三值逻辑 自己去BAIDU一下 很多这样的解释的
------解决方案--------------------
两边 ASCII(SUBSTRING('SYSTEM', 1, 1)) 的值是否一致?只有这个值不在 0~127 之间,结果才是 NULL。
是不是2008中是全角字符?
------解决方案--------------------
对比一下两边的排序规则,右键实例→属性→常规→【服务器排序规则】,但是08会有改变,不保证这些改变不影响你的结果
------解决方案--------------------
我试了一下
SELECT char(129),ascii(char(129)),nchar(129),unicode(nchar(129))
SQL Server 2000 结果是
---- ----------- ---- -----------
NULL ? 129
SQL Server 2008 结果是
---- ----------- ---- -----------
NULL NULL ? 129
没办法了,改用 nchar/unicode 吧。