खैर, कोई TRY_CONVERT() नहीं है या TRY_CAST() एसक्यूएल-सर्वर 2008 में, लेकिन आप एक्सएमएल की आंतरिक कास्ट को अशक्त प्रकारों में उपयोग कर सकते हैं।
इसे आजमाएं
DECLARE @tbl TABLE(SomeInt VARCHAR(100));
INSERT INTO @tbl VALUES('123')
,('blah') --bad data
SELECT t.*
,CAST('' AS XML).value('sql:column("t.SomeInt") cast as xs:int?','int')
FROM @tbl t;
थोड़ा सा हैक... लेकिन किसी तरह सुंदर;-)
कुछ स्पष्टीकरण
CAST('' AS XML) असली XML प्राप्त करने के लिए बस एक तरकीब है एक्सएमएल के मूल तरीकों का उपयोग करने के लिए। sql:column() एक XQuery है -फंक्शन, जो आपको एक सेट के कॉलम को XQuery . में शामिल करने की अनुमति देता है (sql:variable का उपयोग करें चर के लिए)।
cast as xs:int? स्ट्रिंग को इंट-वैल्यू के रूप में पार्स करने का प्रयास करेगा और यदि यह काम नहीं करता है तो NULL लौटाएगा।
सीमा है:यह हमेशा आपके सिस्टम के डिफ़ॉल्ट (TRY_CAST के समान) का उपयोग करेगा ) TRY_CONVERT . के साथ तीसरे पैरामीटर के साथ आउटपुट पर आपका अधिक नियंत्रण होगा...
संकेत:XQuery/Xpath सख्ती से केस-संवेदी है। तो xs:dateTime? . है , लेकिन आपको xs:datetime . के साथ एक त्रुटि मिलेगी ...