我有其中目标表和where子句条件被指定为参数的简单存储过程。该“算术溢出错误转换nvarchar的数据类型的数字。”错误导致我有点挫折。如何解决“将nvarchar转换为数据类型数值的算术溢出错误。”错误?
@TableName varchar(50), -- 'A_RECORD_ETH0' test value
@Time_ms decimal(18,4), -- '40388629085.6481' test value
@Records int out, -- should result with '1' if test values are used
这工作:
SELECT COUNT(*) as Count FROM A_RECORD_ETH0 WHERE Time_ms = 40388629085.6481
这工作:
SET @sql = N'SET @Records = (SELECT COUNT(*) FROM A_RECORD_ETH0 WHERE Time_ms = 40388629085.6481)'
EXEC sp_executesql @sql, N'@Records int output', @Records output
这工作:
SET @sql = N'SET @Records = (SELECT COUNT(*) FROM '+ @TableName + ' WHERE Time_ms = 40388629085.6481)'
EXEC sp_executesql @sql, N'@Records int output', @Records output
这将导致算术溢出错误:
SET @sql = N'SET @Records = (SELECT COUNT(*) FROM '+ @TableName + ' WHERE Time_ms = ' + @Time_ms + ')'
EXEC sp_executesql @sql, N'@Records int output', @Records output
这将导致算术溢出错误即使使用投:
SET @sql = N'SET @Records = (SELECT COUNT(*) FROM '+ @TableName + ' WHERE Time_ms = Cast (' + @Time_ms + ' as decimal(18,4)))'
EXEC sp_executesql @sql, N'@Records int output', @Records output