सबसे पहले, चूंकि आप SQL सर्वर 2005 का उपयोग कर रहे हैं, आपको अपना कोड डालना चाहिए जो हो सकता है BEGIN TRY.....END TRY BEGIN CATCH....END CATCH
में विफल ब्लॉक - टी-एसक्यूएल के लिए प्रयास/पकड़ ब्लॉक!
दूसरा, सभी दिनांक हेरफेर के लिए, मैं हमेशा ISO-8601 प्रारूप का उपयोग करें जो SQL सर्वर में वर्तमान दिनांक प्रारूप सेट किए बिना काम करेगा।
ISO-8601 प्रारूप YYYYMMDD
है केवल तिथियों के लिए, या YYYY-MM-DDTHH:MM:SS
समय के साथ तारीख के लिए - इसलिए मैं आपका कोड इस प्रकार लिखूंगा:
BEGIN TRY
SET @Source='07152009'
SET @Temp = RIGHT(@Source, 4) + -- YYYY
LEFT(@Source, 2) + -- MM
SUBSTRING(@Source, 3, 2) -- DD
IF ISDATE(@Temp)!=1
BEGIN
RAISERROR('ERROR, invalid date',16,1)
END
SET @Destination = CAST(@Temp AS DATETIME)
END TRY
BEGIN CATCH
-- handle error if something bombs out
END CATCH
किसी विशेष तिथि प्रारूप के सेट होने पर भरोसा न करें !! मुझे अपना कोड भेजें और मैं इसे स्विस-जर्मन सिस्टम पर आज़माऊंगा - मैं लगभग गारंटी देता हूं कि अगर आप आँख बंद करके "एन-यूएस" मान लेते हैं और इस प्रकार "mm/dd/yyyy" मान लेते हैं तो यह टूट जाएगा - यह नहींहै। मजबूत> इस ग्रह पर हर जगह एक ही सेटिंग।
दुर्भाग्य से SQL सर्वर कमजोर हैंडलिंग तिथियां हैं - शायद यह एक विस्तार बिंदु हो सकता है जहां SQL सर्वर के अंदर एक सीएलआर असेंबली का उपयोग करना समझ में आता है, .NET में अधिक समृद्ध दिनांक प्रबंधन कार्यों में टैप करने के लिए ??
मार्क
पुनश्च:ऐसा लगता है कि ISO-8601 प्रारूप मुझे पता था कि YYYY-MM-DD हमेशा SQL सर्वर में काम नहीं करता है - इसके विपरीत जो पुस्तकें ऑनलाइन प्रचार करती प्रतीत होती हैं। इसके बजाय YYYYMMDD या YYYY-MM-DDTHH:MM:SS का उपयोग करें।
धन्यवाद, जीबीएन!