我在一个表中有一个varchar列,我想将其数据插入同一表中其数据类型为money的另一列。源列中的某些值是我想忽略的大数字,只想将这些值设置为NULL。

我尝试了这个:

UPDATE MyTable SET destCol = CASE WHEN IsNumeric(sourceCol) = 1 THEN sourceCol END

但这会在尝试测试大数时引发“算术溢出错误...”。

我在想我可能需要某种功能,或者在存储过程中使用try/catch块来获得所需的功能。

更新

我忘了提到源列中的某些值,其文本值根本无法转换为金钱,这些值也需要设置为NULL。

最佳答案

如果问题是由大量数字引起的,则可以限制为可转换为money的数字

UPDATE MyTable
SET destCol = CAST(sourceCol AS money)
WHERE  sourceCol < 922337203685477.5807
money范围是从-922,337,203,685,477.5808922,337,203,685,477.5807的货币

[编辑]

所以你有varchar列。您可以执行以下操作:
UPDATE MyTable
SET destCol =
    CASE WHEN Len(sourceCol) < 15 AND ISNUMERIC(sourceCol) = 1 THEN CAST(sourceCol AS MONEY) ELSE 0 END

关于sql - 在SQL更新过程中跳过过去的转换错误并继续的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6273098/

10-10 16:16