У меня есть простая хранимая процедура, когда целевая таблица и где условия раздела указаны в качестве параметров. «Ошибка арифметического переполнения преобразования 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