我在表中有一个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更新期间跳过过去的错误并继续的最佳方法是什么? - 代码日志