एसक्यूएल सर्वर अंकगणित अतिप्रवाह त्रुटि अभिव्यक्ति को डेटा प्रकार int में कनवर्ट करना

मेरे पास एक ट्रिगर है जो एक तालिका में रिकॉर्ड डालने के बाद निष्पादित होता है। मूल रूप से ट्रिगर, एक फ़ंक्शन को कॉल करता है और इसमें सम्मिलित मूल्यों को पास करता है। हालांकि, यह कुछ बार काम करता है, मैं भी निम्न त्रुटि प्राप्त करता रहता हूं:

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

मैं थोड़ी देर के लिए इसके साथ खेल रहा हूं, लेकिन मेरी उंगली को समस्या पर नहीं लग रहा है, विशेष रूप से यह कभी-कभी काम करता है।

2
जोड़ा संपादित
विचारों: 1
धन्यवाद माइकल, आपने वास्तव में समस्या को ठीक करने में मेरी मदद की। मैंने क्वेरी को देखने में इतना समय बिताया है, मैं इसके बारे में भूल गया।
जोड़ा लेखक Dan, स्रोत
सिर्फ प्रश्न को देखकर कहना असंभव है। आपके पास शायद कहीं एक अंतर्निहित प्रकार रूपांतरण है। यह हो सकता है कि फ़ंक्शन के लिए पैरामीटर int के रूप में घोषित किया गया है और आप एक वर्चर फ़ील्ड को एक तर्क के रूप में पास करते हैं कि अधिकांश बार इसमें एक संख्या होती है लेकिन कभी-कभी इसमें टेक्स्ट होता है। तो आपको बस अपने डेटा प्रकारों की जांच करनी है।
जोड़ा लेखक Mikael Eriksson, स्रोत

1 उत्तर

दो पैरामीटर के लिए INT की बजाय FLOAT पर फ़ंक्शन पर तर्क, तर्क।

2
जोड़ा