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.
如果问题是由巨大数字引起的,您可以限制为可转换为的数字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.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
Run Code Online (Sandbox Code Playgroud)