将varchar转换为数据类型numeric的算术溢出错误

时间:2011-05-26 18:53:35

标签: sql

您好我在下面有一个查询,为我创建插入脚本。 TotalPremiumValue列有datatype Decimal(5,2)。当我执行我的查询时,我收到以下错误:算术溢出错误将varchar转换为数据类型数字。有人可以帮助我吗?

SELECT 'IF NOT EXISTS(SELECT 1 FROM Lkup.TotalPremium WHERE [TotalPremiumValue]= '''+[TotalPremiumValue]+''') 
INSERT INTO Lkup.TotalPremium ' + 
 '(' + 
 '[TotalPremiumValue],' + 
 '[EffectiveDate]' + 
 ')' + 
 'VALUES (' +
 CASE WHEN [TotalPremiumValue] IS NULL THEN 'NULL' ELSE CONVERT(VARCHAR(40), [TotalPremiumValue]) END + ', ' +
 CASE WHEN [EffectiveDate] IS NULL THEN 'NULL' ELSE 'CONVERT(DATETIME, ' + master.sys.fn_varbintohexstr (CONVERT(BINARY(8), [EffectiveDate])) + ')' END + ', ' +
 ')'
 FROM Lkup.TotalPremium 

由于

2 个答案:

答案 0 :(得分:0)

或许尝试将结果重铸为小数(5,2)?我将调用添加到您的代码的一部分并粘贴以下部分。您还可以将varchar(40)缩小到varchar(6),这将保存所有5个数字加上小数点。

 'VALUES ( CAST(' + 
 CASE WHEN [TotalPremiumValue] IS NULL THEN 'NULL' ELSE CONVERT(VARCHAR(40), [TotalPremiumValue]) END + ' AS DECIMAL(5,2)), ' + 
 CASE WHEN [EffectiveDate] IS NULL THEN 'NULL' ELSE 'CONVERT(DATETIME, ' + master.sys.fn_varbintohexstr (CONVERT(BINARY(8), [EffectiveDate])) + ')' END + ', ' + 
 ')'

答案 1 :(得分:0)

请尝试以下查询

SELECT 
'IF  EXISTS(SELECT 1 FROM Lkup WHERE [TotalPremiumValue] = ' + CONVERT(varchar(50),     [TotalPremiumValue])  + ') 
INSERT INTO Lkup ' + 
'(' + 
'[TotalPremiumValue]' + 
')' + 
'VALUES (' + 
case when CONVERT(varchar(50),[TotalPremiumValue]) IS NULL then 'null' else CONVERT(varchar(50),TotalPremiumValue) end +
')' 
FROM  Lkup