У меня есть требование создать несколько структур xml (заимствовать C-фразу) в sql-server-2005. Для этого я изменяю все свои значения на 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' как десятичное число (10,5)) дает мне:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.