将表达式转换为数据类型int时发生SQL Server算术溢出错误
我有一个触发器,它在记录插入表后执行。触发器基本上调用函数,并将值从insert传递到函数中。但是,虽然有时它可以正常工作,但我也不断遇到以下错误:将表达式转换为数据类型int时发生SQL Server算术溢出错误,sql,sql-server,sql-server-2008,sql-server-2005,Sql,Sql Server,Sql Server 2008,Sql Server 2005,我有一个触发器,它在记录插入表后执行。触发器基本上调用函数,并将值从insert传递到函数中。但是,虽然有时它可以正常工作,但我也不断遇到以下错误: Msg 8115, Level 16, State 2, Procedure UpdateNabersRating, Line 17 Arithmetic overflow error converting expression to data type int. 触发条件如下: UPDATE BMS_Snapshot SET NABER
Msg 8115, Level 16, State 2, Procedure UpdateNabersRating, Line 17
Arithmetic overflow error converting expression to data type int.
触发条件如下:
UPDATE BMS_Snapshot SET
NABERS = dbo.SetmetricsNABERSCalculation(
60,
tbl.NetFloorArea,
tbl.ElectricityCumulative,
tbl.GasCumulative,
tbl.ElectricityCumulativeMax,
tbl.GasCumulativeMax,
tbl.ElectricityMaxTotal,
tbl.GasMaxTotal,
tbl.NaturalGasConversionCubicMetersToMJ,
tbl.SuburbId)
FROM
(SELECT
Snap.SnapshotId AS SnapshotId,
Snap.ElectricityCumulative AS ElectricityCumulative,
Snap.GasCumulative AS GasCumulative,
Building.NetFloorArea AS NetFloorArea,
Building.NABERSElecTotalMax AS ElectricityMaxTotal,
Building.NABERSGasTotalMax AS GasMaxTotal,
Building.NABERSExpiry As Expiry,
NABERSTarget.ElecCumulativeMax AS ElectricityCumulativeMax,
NABERSTarget.GasCumulativeMax AS GasCumulativeMax,
[State].NaturalGasConversionCubicMetersToMJ AS NaturalGasConversionCubicMetersToMJ,
Suburb.SuburbId AS SuburbId
FROM inserted AS Snap
INNER JOIN AST_Building AS Building ON Snap.BuildingId = Building.BuildingId
INNER JOIN ESD_Suburb AS Suburb ON Building.SuburbId = Suburb.SuburbId
INNER JOIN ESD_State AS [State] ON Suburb.StateId = [State].StateId
INNER JOIN AST_NABERSTarget NABERSTarget ON Snap.BuildingId = NABERSTarget.BuildingId AND
Snap.TimeStamp = NABERSTarget.Timestamp
/*Where Snap.SnapshotId IN (Select inserted.SnapshotId FROM inserted)*/) AS tbl
WHERE tbl.SnapshotId = BMS_Snapshot.SnapshotId AND BMS_Snapshot.Range = 1
我已经玩了一段时间了,但似乎无法指出这个问题,特别是考虑到它有时会起作用。将函数上的参数改为FLOAT,而不是其中两个参数的INT。仅通过查看查询无法确定。您可能在某个地方进行了隐式类型转换。可能是函数的一个参数被声明为int,并且您将一个varchar字段作为一个参数传递,该参数在大多数情况下包含一个数字,但有时包含文本。所以你只需要检查你的数据类型。谢谢Mikael,你真的帮我解决了这个问题。我花了太多时间研究这个问题,我都忘了。