将 varchar 转换为数字数据类型时出现算术溢出错误。找不到存储过程''。?
Posted
技术标签:
【中文标题】将 varchar 转换为数字数据类型时出现算术溢出错误。找不到存储过程\'\'。?【英文标题】:Arithmetic overflow error converting varchar to data type numeric. Could not find stored procedure ''.?将 varchar 转换为数字数据类型时出现算术溢出错误。找不到存储过程''。? 【发布时间】:2015-11-13 08:59:52 【问题描述】:执行存储过程时出现此错误 (SP_StoredProcedure
):
我的存储过程 (SP_StoredProcedure
) 在执行之前从 VB.NET 收集了一些数据
dim TableName string = "Table1"
dim acctcode as string "Table1.acctcode"
dim month as integer = 1
dim year as integer = 2011
这是我从 VB.NET 执行存储过程 (SP_StoredProcedure
) 的代码:
execute("EXECUTE SP_StoredProcedure '"& TableName &"','"& acctcode &"',"& month &","& year &"")
这是我在SP_StoredProcedure
上的代码:
CREATE PROCEDURE [dbo].[SP_StoredProcedure]
@TableName as varchar(100),
@AcctCode as varchar(100),
@Month as numeric(18,0),
@Year as numeric(18,0)
AS
BEGIN
DECLARE @Query as varchar(1000)
SET @Query =
'UPDATE Table2 SET Dat = (SELECT Dat FROM '+ @TableName +' WHERE table2.acctcode = '+ @acctcode +' AND month = '+ @month +' AND year = '+ @year +') FROM Table2'
EXEC @Query
END
【问题讨论】:
SELECT SUM FROM
总和是什么?
将year
和month
声明为Double
而不是int
@Giorgi Nakeuri SUM 只是一个列名
如果SUM
是列名,你应该把它放在[ ]
中,像这样:[SUM]
@NguyễnHảiTriều 这不是我的确切列名。我将更改示例以避免混淆。对不起
【参考方案1】:
在 varchar 字符串中进行动态查询时,需要转换数值,这对日期也很重要!否则,它不会正确附加到 @Query 变量。
另外,如果@acctcode 是一个varchar,那么您需要用额外的单引号对其进行转义,以便它能够像字符串一样正确处理它。
即..
SET @Query = ' UPDATE Table2 ' +
' SET Dat = ( ' +
' SELECT Dat FROM ' + @TableName +
' WHERE table2.acctcode = '''+ @acctcode +''' +
' AND month = ' + convert(varchar(18), @month) +
' AND year = '+ convert(varchar(18), @year) +
' ) ' +
' FROM Table2 '
【讨论】:
它给了我这个错误:The name ' UPDATE Table2 ' + ' SET Dat = ( ' + ' SELECT Dat FROM ' + @TableName + ' WHERE table2.acctcode = '+ @acctcode + ' AND month = ' + convert(varchar(18), @month) + ' AND year = '+ convert(varchar(18), @year) + ' ) ' + ' FROM Table2 ' is not a valid identifier.
对不起,我正在编辑它,现在尝试在需要转义的 @acctcode 周围加上额外的单引号。
只是@acctcode? @tablename 怎么样?我可以知道为什么吗?
所有字符串都被分配或测试,就像.. String = 'TEST' 它们用单引号括起来.. 对,基本 SQL。但是,当您添加表名时,这只是您要附加的文本。所以你不需要用单引号括起来,因为当你写一个普通的查询时,它不像 .. select * from 'TABLENAME' 对。以上是关于将 varchar 转换为数字数据类型时出现算术溢出错误。找不到存储过程''。?的主要内容,如果未能解决你的问题,请参考以下文章
将 expression 转换为数据类型 datetime 时出现算术溢出错误。
将 numeric 转换为数据类型 numeric 时出现算术溢出错误
将 varchar 值“1.33”转换为数据类型 int 时出现问题
求教大神,update tb set a=a*10报错将 numeric 转换为数据类型 numeric 时出现算术溢出错误