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

Cra*_*ack 5 sql t-sql sql-server

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

我试过这个:

UPDATE MyTable SET destCol = CASE WHEN IsNumeric(sourceCol) = 1 THEN sourceCol END
Run Code Online (Sandbox Code Playgroud)

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

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

UPDATE

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

Ale*_*Aza 2

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

UPDATE MyTable
SET destCol = CAST(sourceCol AS money)
WHERE  sourceCol < 922337203685477.5807
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)