Ich habe eine Anforderung, einige XML-Strukturen (um eine C-Phrase zu borgen) in SQL-Server-2005 zu erstellen. Um dies zu tun, ändere ich alle meine Werte in varchar. Das Problem tritt auf, wenn ich diese Werte verwenden möchte, muss ich sie in Dezimal konvertieren.konvertieren 'Null' Varchar in Dezimal
So sieht mein xml-Code wie folgt aus:
set @result = @result + <VAL>' + coalesce(cast(@val as varchar(20)), '-.11111') + '</VAL>'
auf diese Weise, wenn VAL null ist, kehre ich eine besondere dezimal und ich kann für diese dezimal überprüfen. Der Nachteil, dies zu tun, ist, dass ich nicht coalesce am anderen Ende verwenden kann, wenn ich den Wert verwenden, muß ich überprüfen, ob es Wert auf 0 wie dies gleich konvertiert ist:
case when cast(InvestmentReturn.fn_getSTRUCT(...args...).value('results[1]/VAL[1]', 'varchar(40)')as decimal(10,5)) = -.11111
Seit Performance ist derzeit inakzeptabel. Ich dachte, eine Möglichkeit, die Leistung zu verbessern, wäre die Verwendung von Coalesce, anstatt eine geschachtelte case-Anweisung zu verwenden und den Wert für die Gleichheit mit meinem speziellen 'null'-Äquivalent zu überprüfen.
Irgendwelche Gedanken?
auch, ich sehe, dass select cast ('null' als Dezimalzahl (10,5)) gibt mir:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.