0

我正在修改一个存储过程,然后执行它。基本上,它是关于将月度索赔表(我已经导入,所有变量都是VARCHAR(MAX))插入现有的带有以前历史数据的大表中。

存储过程所做的主要是根据现有的大表变量数据类型更改所有变量的数据类型。在大多数情况下,我已经能够运行存储过程并更新大表。对于其中一个文件,当我运行该过程时,它给了我以下错误:

消息 8114,级别 16,状态 5,过程 InsertClaimsData,第 10 行 [批处理开始第 8 行] 将数据类型 varchar 转换为浮点数时出错

我无法弄清楚是哪个确切的变量导致了这个问题,因为有超过 10 个变量,该代码的原始作者使用了以下类型的转换代码:

CASE WHEN ISNUMERIC([INSURED ZIP]) = 1 THEN CAST([INSURED ZIP] AS FLOAT) ELSE 0 END
,CASE WHEN ISNUMERIC([BILLING PROVIDER TAX ID]) = 1 THEN CAST([BILLING PROVIDER TAX ID] AS FLOAT) ELSE 0 END

以上只是一小段代码。

有没有更好的方法来编写这段代码,以便万一有一些坏数据,它会忽略它并且不给出错误?或者有什么方法可以知道哪些变量或记录是造成这个错误的原因,然后我可以修复它?

我正在使用 SSMS 17

4

1 回答 1

1

ISNUMERIC对于数字类型的值,将返回 true,但不是真的,因此它可能并不完全理想。如果您稍微浏览一下,有很多例子会引发问题。这个答案提供了一些例子。

您可以使用TRY_PARSE()TRY_CAST()作为替代方法,看看这是否有助于纠正您的问题。

于 2019-01-15T23:31:13.490 回答