我正在修改存储过程,然后执行它。基本上,这是关于将每月索赔表(我已导入,所有变量均为VARCHAR(MAX)
)插入到具有先前历史数据的现有大表中。
存储过程的主要目的是根据现有的大表变量数据类型更改所有变量的数据类型。在大多数情况下,我已经能够运行存储过程并更新大表。对于其中一个文件,当我运行该过程时,出现以下错误:
消息8114,级别16,状态5,过程InsertClaimsData,第10行[批处理开始第8行] 将数据类型varchar转换为float时出错
我无法找出是哪个确切的变量导致了此问题,因为此代码的原始编写者使用了以下类型的转换代码的变量超过了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
答案 0 :(得分:1)
ISNUMERIC
对于某种数值(但不是真的)将返回true,因此可能并不完全理想。如果您浏览一下,有很多示例会引发问题。 This answer提供了一些示例。
您可以使用TRY_PARSE()或TRY_CAST()作为替代方案,看看是否可以解决您的问题。