我需要在 sql-server-2005 中创建一些 xml 结构(借用一个 C 短语)。为此,我将所有值更改为 varchar。当我想使用这些值时会出现问题,我必须将它们转换为十进制。
所以,我的 xml 代码如下所示:
set @result = @result + <VAL>' + coalesce(cast(@val as varchar(20)), '-.11111') + '</VAL>'
这样,如果 VAL 为空,我返回一个特殊的小数,我可以检查那个小数。这样做的缺点是,当我使用该值时,我不能在另一端使用 coalesce,我必须检查它转换后的值是否等于 0。像这样:
case when cast(InvestmentReturn.fn_getSTRUCT(...args...).value('results[1]/VAL[1]', 'varchar(40)')as decimal(10,5)) = -.11111
由于现在的性能是不可接受的,我认为提高性能的一种方法可能是使用 coalesce 而不是使用嵌套的 case 语句,并使用我的特殊“null”等效项检查值是否相等。
有什么想法吗?
另外,我看到 select cast('null' as decimal(10,5)) 给了我:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.