結果的空間不足,無法將 money (貨幣) 值轉換成 smallmoney。該欄位資料型態是 smallmoeny,很明顯是 sum 結果超過 smallmoney 資料範圍導致的異常,samllint 資料範圍在 -214,748.3648 到 214,748.3647 之間,但意外的是為什麼針對 smallmoney 欄位進行 sum 時是回傳 moeny 資料型態
在官方文件 - sum return type 內有說明,彙總函式 sum 結果會發生資料型態隱含轉換,以該例來看就是 sum 把 smallmoney 資料彙總時,因為彙總結果超過 smallmoney 資料範圍,所以隱含轉換為 money,insert 回 smallmoney 欄位時拋出錯誤
簡易範例驗證
use tempdb
GO
DROP TABLE IF EXISTS tblDemo
CREATE TABLE tblDemo
(
ID int identity(1,1) ,
ColSmallMoney smallmoney
)
INSERT INTO tblDemo (ColSmallMoney) VALUES(214748)
INSERT INTO tblDemo (ColSmallMoney) VALUES(214748)
GO
SELECT
SQL_VARIANT_PROPERTY(SUM(ColSmallMoney) , 'BaseType') -- 會得到 money 資料型態
FROM tblDemo


沒有留言:
張貼留言