खैर, मुझे पसंद है MONEY! यह बाइट की तुलना में सस्ता है DECIMAL, और गणना जल्दी करते हैं क्योंकि (कवर के तहत) जोड़ और घटाव संचालन अनिवार्य रूप से पूर्णांक ऑपरेशन हैं। @ SQLMenace का उदाहरण- जो अनजान लोगों के लिए एक बड़ी चेतावनी है - समान रूप से INTईगर्स पर लागू किया जा सकता है , जहां परिणाम शून्य होगा। लेकिन पूर्णांक का उपयोग नहीं करने का कोई कारण नहीं है - जहां उपयुक्त हो ।
तो, यह पूरी तरह से 'सुरक्षित' है और MONEYजब आप जो व्यवहार कर रहे हैं उसका उपयोग करना उचित है MONEYऔर गणितीय नियमों के अनुसार इसका उपयोग करें कि यह ( INTईगर के समान )।
यह बेहतर होता है अगर एसक्यूएल सर्वर विभाजन और के गुणन पदोन्नत MONEYमें s ' DECIMALs (या FLOAT- संभवतः, लेकिन वे ऐसा करने के लिए नहीं चुना था रों?); और न ही उन्हें विभाजित करते समय INTई को बढ़ावा देने के लिए चुना FLOAT।
MONEYकोई सटीक मुद्दा नहीं है; कि DECIMALएक बड़ा मध्यवर्ती गणना के दौरान इस्तेमाल किया प्रकार सिर्फ एक है कि प्रकार का उपयोग करने का 'विशेषता है के लिए मिलता है (और मैं वास्तव में यकीन है कि कितनी दूर है कि' सुविधा 'का विस्तार नहीं कर रहा हूँ)।
विशिष्ट प्रश्न का उत्तर देने के लिए, "सम्मोहक कारण"? ठीक है, अगर आप चाहते हैं कि अधिकतम अधिकतम प्रदर्शन SUM(x)जहां या xतो हो सकता है , तो एक बढ़त होगी।DECIMALMONEYMONEY
इसके अलावा, यह मत भूलना छोटा चचेरा भाई, - SMALLMONEY4 बाइट्स, लेकिन यह अधिकतम करता है 214,748.3647- जो पैसे के लिए बहुत छोटा है - और इसलिए अक्सर एक अच्छा फिट नहीं होता है।
बड़े मध्यवर्ती प्रकारों का उपयोग करते हुए बिंदु को साबित करने के लिए, यदि आप मध्यवर्ती को स्पष्ट रूप से एक चर में निर्दिष्ट करते हैं, तो एक DECIMALही समस्या आती है:
declare @a decimal(19,4)
declare @b decimal(19,4)
declare @c decimal(19,4)
declare @d decimal(19,4)
select @a = 100, @b = 339, @c = 10000
set @d = @a/@b
set @d = @d*@c
select @d
प्रोड्यूस 2950.0000(ठीक है, इसलिए कम से कम DECIMALराउंड किए गए बजाय MONEYएक पूर्णांक के समान होगा)।
DECIMAL(19, 4)है एक लोकप्रिय विकल्प जाँच इस भी जाँच यहाँ विश्व मुद्रा का प्रयोग करना है कि कितने दशमलव स्थानों तय करने के लिए, आशा में मदद करता है।