2015-05-27 47 views
0

這是我寫的查詢。Msg 8115,級別16,狀態6,行4將varchar轉換爲數據類型的算術溢出錯誤數字

DECLARE @SQL_BULK VARCHAR(MAX) 
declare @cp decimal(14,2)=1000 
declare @tb varchar(20)='tbl_LT' 
set @SQL_BULK='insert into '[email protected]+'(ClosePrice) values('''[email protected]+''');' 
EXEC (@SQL_BULK) 

當我執行我得到消息8115,級別16,狀態6,行查詢4 算術溢出錯誤轉換VARCHAR數據類型的數字。作爲錯誤。

我已經試過轉換方法。

回答

0

只要將Numerics添加到字符串中,默認行爲就是將字符串轉換爲Number。

在這種情況下

set @SQL_BULK='insert into '[email protected]+'(ClosePrice) values('''[email protected]+''');' 

要添加到@cp這是造成問題的字符串。

你必須重新寫爲

set @SQL_BULK='insert into '[email protected]+'(ClosePrice) values('''+CAST(@cp AS VARCHAR)+''');' 
1

+運算符在SQL Server中被重載。如果任何參數是數字,那麼它是一個字符串。

通常情況下,我做你想要使用replace()防止這個問題做什麼:

set @SQL_BULK = 'insert into @tb(ClosePrice) values(@cp)'; 
set @SQL_BULK = replace(@SQL_BULK, '@tb', @tb); 
set @SQL_BULK = replace(@SQL_BULK, '@cp', @cb); 
EXEC (@SQL_BULK) 

作爲一個說明:你應該使用`sp_executesql的,並在第二個值作爲參數傳遞:

set @SQL_BULK = 'insert into @tb(ClosePrice) values(''@cp'')'; 
set @SQL_BULK = replace(@SQL_BULK, '@tb', @tb); 
exec sp_executesql @SQL_BULK, N'@cb decimal(14, 2)', @cp = @cp; 
相關問題