在SQL更新期间跳过过去的错误并继续的最佳方法是什么?

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

我试过这个:

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

但是当它试图测试大数字时会抛出“算术溢出错误……”.

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

UPDATE

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

最佳答案
如果问题是由大量数据引起的,您可以限制为可转换为金钱的那些

UPDATE MyTable
SET destCol = CAST(sourceCol AS money)
WHERE  sourceCol < 922337203685477.5807

货币范围是从-922,337,203,685,477.5808到922,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更新期间跳过过去的错误并继续的最佳方法是什么? - 代码日志