【发布时间】:2013-11-22 22:34:42
【问题描述】:
我有一个简单的存储过程,其中将目标表和 where 子句条件指定为参数。 “将 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
【问题讨论】:
标签: sql sql-server math casting overflow