这是我写的查询。
DECLARE @SQL_BULK VARCHAR(MAX)
declare @cp decimal(14,2)=1000
declare @tb varchar(20)='tbl_LT'
set @SQL_BULK='insert into '+@tb+'(ClosePrice) values('''+@cp+''');'
EXEC (@SQL_BULK)
当我执行查询时,我得到消息8115,级别16,状态6,行4 算术溢出错误将varchar转换为数据类型numeric。为错误。
我尝试过转换,转换方法。
答案 0 :(得分: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;
答案 1 :(得分:0)
每当您将Numerics添加到字符串时,默认行为是将字符串转换为Number。
在这种情况下
set @SQL_BULK='insert into '+@tb+'(ClosePrice) values('''+@cp+''');'
您正在将@cp添加到导致问题的字符串中。
你必须重写为
set @SQL_BULK='insert into '+@tb+'(ClosePrice) values('''+CAST(@cp AS VARCHAR)+''');'