2014-10-08 5 views
12

मेरे पास निम्न नमूना कोड है। उद्देश्य एकाधिक इनपुट पैरामीटर के साथ SQL कथन चलाने के लिए है।fsharp.data.sqlclient में SQL इन कथन का उपयोग कैसे करें?

[<Literal>] 
let connectionString = @"Data Source=Localhost;Initial Catalog=Instrument;Integrated Security=True" 
[<Literal>] 
let query = "SELECT MacroName, MacroCode FROM Instrument WHERE MacroCode IN (@codeName)" 

type MacroQuery = SqlCommandProvider<query, connectionString> 
let cmd = new MacroQuery() 
let res = cmd.AsyncExecute(codeName= [|"CPI";"GDP"|]) |> Async.RunSynchronously 

हालांकि, कोडनेम स्ट्रिंग प्रकार के बजाय एक सरणी या सूची हो सकता है और मुझे एक त्रुटि देने के लिए मान लिया जाता है।

वैकल्पिक रूप से, मैं परिणाम के आधार पर जहां कथन और फ़िल्टर के बिना क्वेरी चला सकता हूं। हालांकि, कई अन्य मामलों में जो लाखों पंक्तियां लौटाता है, मैं SQL सर्वर स्तर पर फ़िल्टर डेटा को अधिक कुशल होने के लिए पसंद करूंगा।

मुझे fsharp.data.sqlclient के दस्तावेज़ीकरण पर कोई प्रासंगिक नमूने नहीं मिला। कृपया सहायता कीजिए!

+0

मुझे लगता है कि आप SQL सर्वर को लक्षित कर रहे हैं। खैर, कारण यह है कि यह किसी सरणी या सूची का उपयोग नहीं कर रहा है - SQL सर्वर में ऐसे डेटा प्रकार नहीं हैं। इसमें एक डेटा प्रकार है जो विशेष रूप से डेटा के कई आइटम संग्रहीत करने के लिए डिज़ाइन किया गया है - तालिका। मैं [टैग: fsharp.data.sqlclient] से परिचित नहीं हूं, लेकिन मैं आपको यह सलाह देने की सलाह दूंगा कि तालिका-मूल्यवान पैरामीटर को कैसे पास किया जाए। –

उत्तर

6

"देखें टेबल-मान मानकों (TVPs)" दस्तावेज में अनुभाग: http://fsprojects.github.io/FSharp.Data.SqlClient/configuration%20and%20input.html

+3

तो आपको अपनी क्वेरी को संग्रहीत प्रक्रिया में रखना होगा, और एक आईएन कथन का उपयोग करने के लिए कस्टम एसक्यूएल प्रकार बनाना होगा? छी। –

4

आप एक ऊपरी बाध्य n IN सूची में मूल्यों पर है, तो आप सिर्फ n मापदंडों बना सकता है । अगर यह अप्रबंधनीय है, तो मुझे डर है कि टीवीपी सुझाव आपका सबसे अच्छा विकल्प है। FSharp.Data.SQL क्लाइंट लाइब्रेरी का कारण कभी भी इसका समर्थन करने की संभावना नहीं है क्योंकि sp_describe_undeclared_parameters के परिणामों के आधार पर प्रकार उत्पन्न होते हैं; कोई टी-एसक्यूएल पार्सर नहीं है। हमारे पास इस परिदृश्य में एक अंक ऊपरी बाउंड था और डेटाबेस को बदलने के लिए नाराज थे, इसलिए यह विकल्प हमारे लिए काम करता था।

संबंधित मुद्दे