2011-05-26 91 views
2

嗨,我有一個查詢下面爲我創建插入腳本。 TotalPremiumValue列有datatype Decimal(5,2)。當我執行我的查詢時,我收到以下錯誤:算術溢出錯誤將varchar轉換爲數據類型數字。有誰能夠幫助我?算術溢出錯誤將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 

感謝

+0

我想象的幾個細節,比如該行的在產生錯誤的內容,將是有益的。還有你正在使用哪個數據庫。理想情況下,你可以有一個更小的測試用例(例如'select convert(varchar(40),'blah');'或其他任何導致它發生的事情 – 2011-05-26 19:08:30

+0

很酷我剛剛使用了CONVERT(VARCHAR(40),TotalPremiumValue,select謝謝Seth。 – Programmer 2011-05-26 19:17:12

回答

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 + ', ' + 
')' 
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 
相關問題