SQLServer中的數據類型隱式轉換問題

寫這篇文章的時候,還真不知道如何取名,也不知道這個該如何將其歸類。這個是同事遇到的一個案例,案例比較復雜,這里抽絲剝繭,僅僅構造一個簡單的案例來展現一下這個問題。我們先構造測試數據,如下所示:

成都創新互聯公司服務項目包括巴東網站建設、巴東網站制作、巴東網頁制作以及巴東網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,巴東網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到巴東省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!

 CREATE TABLE TEST
( 
 ID INT, 
 GOOD_TYPE VARCHAR(12),
 GOOD_WEIGHT NUMERIC(18,2)
)
INSERT INTO dbo.TEST
VALUES( 1, 'T1',1.27) 
SELECT GOOD_TYPE,
  CASE WHEN ( GOOD_TYPE = 'T1' ) THEN 99.1 + SUM(GOOD_WEIGHT)
    ELSE CEILING(SUM(GOOD_WEIGHT))
  END AS GrossWeight ,
  SUM(GOOD_WEIGHT) AS NetWeight
FROM dbo.TEST
GROUP BY GOOD_TYPE;

SQL Server 中的數據類型隱式轉換問題

如上所示,為什么99.1 + SUM(GOOD_WEIGHT)變成100了呢? 原始SQL非常復雜,我們分析、排除掉各個因素后,始終不得要領,各種折騰中發現,如果這樣轉換一下(請見下面截圖),居然就OK了,后面分析了一下,應該是CASE WHEN里面的不同數據類型導致隱式轉換,說實話之前還真沒有留意CASE WHEN中存在數據類型的隱性轉換,但是為什么就一定從NUMERIC轉換為INT了呢? 而不是INT隱性轉換為NUMERIC呢, 說實話沒有看到相關文檔的官方,如果按照官方文檔:

SQL Server 中的數據類型隱式轉換問題

當兩個不同數據類型的表達式用運算符組合后,優先級較低的數據類型首先轉換為優先級較高的數據類型。 如果此轉換不是所支持的隱式轉換,則返回錯誤。 對于組合具有相同數據類型的操作數表達式的運算符時,運算的結果便為該數據類型

而我們知道,Decimal NUMERIC 是同義詞,可互換使用,而官方文檔“數據類型優先級 (Transact-SQL)”中,Decimal的優先級明顯高于INT,如果真要按照原理來解釋,應該是INT轉換NUMERIC才對(兩種數據類型支持隱式轉換),所以越想越糊涂,只知道有這么一回事,但是真正的Root Cause尚不清楚,而且在精確度要求較高的報表中,這種現象就會類似Bug一樣的突然出現。需要謹慎留心!

參考資料:

https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/data-type-precedence-transact-sql?view=sql-server-2017

https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/data-type-conversion-database-engine?view=sql-server-2017

總結

以上所述是小編給大家介紹的SQL Server 中的數據類型隱式轉換問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對創新互聯網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

分享題目:SQLServer中的數據類型隱式轉換問題
網站鏈接:http://m.kartarina.com/article0/gesgoo.html

成都網站建設公司_創新互聯,為您提供動態網站App開發軟件開發面包屑導航網頁設計公司商城網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設
主站蜘蛛池模板: 亚洲AV无码不卡在线播放| 人妻系列AV无码专区| 亚洲国产精品无码久久久秋霞1| 无码乱码av天堂一区二区| 国产怡春院无码一区二区| 中文字幕丰满伦子无码| 午夜爽喷水无码成人18禁三级| julia无码人妻中文字幕在线 | 人妻av中文字幕无码专区| 东京热加勒比无码视频| 麻豆亚洲AV永久无码精品久久 | 无码任你躁久久久久久久 | 无码不卡中文字幕av| 亚洲av无码国产精品色午夜字幕| a级毛片无码免费真人| 亚洲色av性色在线观无码| 国产精品无码永久免费888| 中文字幕韩国三级理论无码| 久久无码av三级| 久久影院午夜理论片无码| 亚洲乱亚洲乱妇无码| 久久精品无码一区二区无码| 中出人妻中文字幕无码| 亚洲AV中文无码乱人伦| 色综合热无码热国产| 国产精品成人一区无码| 亚洲精品无码国产片| 婷婷四虎东京热无码群交双飞视频| 亚洲一区爱区精品无码| 国产丝袜无码一区二区三区视频 | 亚洲一区无码中文字幕乱码| 超清无码一区二区三区| 人妻丰满熟妇A v无码区不卡| 无码人妻精品一区二区三区久久久| 人妻aⅴ无码一区二区三区| 久久亚洲AV无码精品色午夜 | 国产成人无码av片在线观看不卡| 亚洲aⅴ无码专区在线观看| 亚洲性无码一区二区三区| 成人免费一区二区无码视频| 亚洲爆乳少妇无码激情|