और भी मजे के लिए, इसे आजमाएं:
DECLARE @i INT
SET @i = 100
SELECT CAST(@i AS VARCHAR(2)) -- result: '*'
go
DECLARE @i INT
SET @i = 100
SELECT CAST(@i AS NVARCHAR(2)) -- result: Arithmetic overflow error
:)पी>
आपके प्रश्न का उत्तर है:"ऐतिहासिक कारण"
डेटाटाइप INT और VARCHAR BIGINT और NVARCHAR से पुराने हैं। बहुत पुराना। वास्तव में वे मूल . में हैं एसक्यूएल चश्मा। आउटपुट को तारांकन से बदलने का अपवाद-दबाने वाला तरीका भी पुराना है।
बाद में, एसक्यूएल लोगों ने फैसला किया कि फर्जी (और आमतौर पर भ्रमित) आउटपुट स्ट्रिंग्स को प्रतिस्थापित करने से त्रुटि फेंकना बेहतर/अधिक सुसंगत आदि था। हालांकि निरंतरता के लिए उन्होंने डेटा-प्रकारों के पहले से मौजूद संयोजनों के लिए पूर्व व्यवहार को बरकरार रखा (ताकि मौजूदा कोड को भंग न किया जा सके)।
इसलिए (काफी) बाद में जब बिगिनट और NVARCHAR डेटाटाइप जोड़े गए, तो उन्हें नया (एर) व्यवहार मिला क्योंकि वे ऊपर बताए गए दादाजी द्वारा कवर नहीं किए गए थे।