आम तौर पर, एसक्यूएल सर्वर एक क्षेत्र में और अधिक डेटा सम्मिलित करने के लिए की तुलना में यह
स्ट्रिंग धारण कर सकते हैं या बाइनरी डेटा छोटा किया जाएगा किसी भी प्रयास पर एक त्रुटि पेश करेंगे। बयान समाप्त कर दिया गया है।
SQL सर्वर डेटा की एक चुपचाप छंटनी की अनुमति नहीं देगा क्योंकि कॉलम डेटा को स्वीकार करने के लिए बहुत छोटा है। लेकिन अन्य तरीके भी हैं कि SQL सर्वर उस तालिका में डालने वाले डेटा को छोटा कर सकता है जो किसी भी प्रकार की त्रुटि या चेतावनी उत्पन्न नहीं करेगा।
डिफ़ॉल्ट रूप से, ANSI_WARNINGS चालू हो जाते हैं, और गणना की गई कॉलम या अनुक्रमित दृश्यों पर इंडेक्स बनाने जैसी कुछ गतिविधियां आवश्यक होती हैं कि वे चालू हों। लेकिन अगर वे बंद हो जाते हैं, तो SQL सर्वर कॉलम में फिट करने के लिए आवश्यक डेटा को छोटा कर देगा। ANSI_WARNINGS एक सत्र के लिए की स्थापना एक तालिका में एक डालने के साथ विपरीत द्वारा
SET ANSI_WARNINGS { ON|OFF }
नियंत्रित किया जा सकता, एसक्यूएल सर्वर चुपचाप डेटा है कि एक चर करने के लिए आवंटित किया जा रहा है, ANSI_WARNINGS की स्थिति की परवाह किए बिना कट जाएगा। उदाहरण के लिए:
declare @smallString varchar(5)
declare @testint int
set @smallString = 'This is a long string'
set @testint = 123.456
print @smallString
print @testint
परिणाम है:
This
123
यह कभी कभी एक संग्रहीत प्रक्रिया में कोई मान गुजर के बाद से सूक्ष्म तरीकों से ही दिखा सकते हैं या समारोह पैरामीटर चर करने के लिए इसे प्रदान करती है और चुपचाप एक रूपांतरण करना होगा ।एक तरीका जो इस स्थिति के खिलाफ सुरक्षा में मदद कर सकता है वह किसी भी पैरामीटर को देना है जो सीधे तालिका में डाला जाएगा लक्ष्य कॉलम की तुलना में एक बड़ा डेटाटाइप ताकि SQL सर्वर त्रुटि बढ़ाए, या शायद पैरामीटर की लंबाई जांच सके और जब यह बहुत लंबा होता है तो इसे संभालने के लिए कस्टम कोड।
उदाहरण के लिए, यदि एक संग्रहीत प्रक्रिया वर्चर (10) वाले कॉलम वाले डेटा में डेटा डालने के लिए पैरामीटर का उपयोग करेगी, तो पैरामीटर वर्कर (15) बनाएं। फिर यदि कॉलम के लिए पास किया गया डेटा बहुत लंबा है, तो यह रोलबैक करेगा और चुपचाप छंटनी और डालने की बजाय एक छंटनी त्रुटि उठाएगा। बेशक, यह किसी भी व्यक्ति को भ्रामक होने का जोखिम चलाता है जो संग्रहीत प्रक्रियाओं को समझने के बिना हेडर जानकारी को देखता है।
Source: Silent Truncation of SQL Server Data Inserts
स्रोत
2015-12-09 06:46:30
क्या आप अपना 'INSERT' कथन पोस्ट कर सकते हैं? –
मुझे लगता है कि डीबी-पक्ष किया जाना संभव है, लेकिन शायद यह एक बुरा विचार है। एप्लिकेशन परत में यह बेहतर है, अन्यथा आप 6 महीने में एक बग में भागने जा रहे हैं (कहें) 6 महीने और आपको पता नहीं है कि आपका डीबी डेटा को यादृच्छिक रूप से दूषित क्यों कर रहा है। – Rob