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