2011-09-26 11 views
5

के दौरान संग्रहीत प्रक्रिया में SQL को मान्य करने से रोकने का कोई तरीका है हमारे सिस्टम के एक पहलू के लिए हमारे SQL सर्वर इंस्टेंस को एक लिंक किए गए सर्वर कनेक्शन के माध्यम से एक MySQL सर्वर से बात करने की आवश्यकता है।क्या SQL सर्वर को CREATE/ALTER

MSSQL -> LinkedServer (MSDASQL ODBC प्रदाता) -> MySQL ODBC कनेक्टर -> MySQL DB

जुड़ा हुआ सर्वर पर टेबल

CREATE PROCEDURE DoStuff 
AS 

SELECT a.ID, a.Name, b.OtherProperty 
FROM MyDatabase..MyTable a 
JOIN LINKSRVR...OtherTable b 
ON  a.ID = b.ID 

GO 

समस्या की तर्ज पर एक sproc में कहा जाता है यह है कि MySQL डेटाबेस किसी अन्य नेटवर्क पर रहता है, केवल वीपीएन & द्वारा पहुंचा जा सकता है कि CREATE या ALTER कथन निम्न त्रुटि के साथ टूट जाता है जब तक कि वीपीएन सक्रिय न हो।

The OLE DB provider "MSDASQL" for linked server "LINKSRVR" reported an error. 
The provider did not give any information about the error. 

Cannot initialize the data source object of OLE DB provider 
"MSDASQL" for linked server "LINKSRVR". 

वहाँ वैसे भी एसक्यूएल सर्वर बस आगे बढ़ो और SQL मैं यह बताना और कोशिश करते हैं और मान्य करने के लिए नहीं है, तो LinkedServer नीचे ऊपर/है साथ sproc बनाने के लिए मजबूर करने के लिए है।

उत्तर

5

आपको इसे स्ट्रिंग में रखकर और इसे गतिशील एसक्यूएल के रूप में निष्पादित करके संकलक से अपमानजनक एसक्यूएल को "छिपाना" होगा।

+1

हाँ इस प्रकार मैं वर्तमान में इसे गोल कर रहा हूं लेकिन यह नरक के रूप में एफ-यूजीली है। वास्तविक संस्करण वास्तव में एक कर्सर में क्वेरी के हिस्से के रूप में अपमानजनक एसक्यूएल को कॉल करता है, इसलिए डायनेमिक एसक्यूएल पूरे हो जाता है, डेक्लेयर वर्र्स, डसेलर कर्सर, ओपन एंड फ़ेच और डीलोकेट जो एसक्यूएल की लगभग 100 लाइनें है। बिल्कुल सुंदर नहीं है। मैं उम्मीद कर रहा था कि कुछ "सेट NO_SQL_COMPILER_VALIDATION चालू" प्रकार विकल्प था: - \ –

+0

ठीक है ... और अधिक प्रतिक्रिया नहीं है इसलिए गंदे गतिशील एसक्यूएल तरीका है। जानकारी जो के लिए चीयर्स। –