दिलचस्प पोस्ट
JSP के साथ यूआरएल से मापदंड कैसे प्राप्त करें Servlet त्रुटि संदेश के साथ उसी पृष्ठ पर रीडायरेक्ट कैसे numpy में एक सरणी से लगातार तत्वों के समूह को खोजने के लिए? समस्याएं Resteasy 3.09 CorsFilter अजगर में कार्य को स्थगित करना वेब। कॉन्फ़िग में सत्र समयबाह्य कैसे सेट करें कैसे एक <div> हमेशा पूर्ण स्क्रीन बनाने के लिए? एक जावास्क्रिप्ट फ़ंक्शन का वर्णन करते हुए एक स्ट्रिंग को देखते हुए, उसे एक जावास्क्रिप्ट फ़ंक्शन में परिवर्तित करें जावास्क्रिप्ट: क्यों अनाम समारोह आवरण? सार्वजनिक / बाह्य आईपी पता प्राप्त करें? अगले / पिछले तत्व जावास्क्रिप्ट का उपयोग करें क्या कोई IDictionary कार्यान्वयन है, जो गिनती की गई कुंजी पर फेंकने के बजाय डिफ़ॉल्ट मान देता है? `Git add 'और` git add -u` के बीच अंतर क्या है? जावास्क्रिप्ट में दो स्ट्रिंग्स के बीच स्ट्रिंग पाने के लिए नियमित अभिव्यक्ति एकल विशाल। सीएसएस फ़ाइल बनाम। कई छोटे विशिष्ट। सीएसएस फ़ाइलें?

कोड एसक्यूएल लिपियों को मान्य करने के लिए

SQL 2.0 और c # का उपयोग करने से पहले मैं SQL स्क्रिप्ट को कैसे मान्य कर सकता हूं?

अगर एसक्यूएल मान्य नहीं है तो मैं त्रुटि पंक्तियों को वापस करना चाहता हूं।

Solutions Collecting From Web of "कोड एसक्यूएल लिपियों को मान्य करने के लिए"

यदि आप एक उपकरण बना रहे हैं जो उपयोगकर्ता को कुछ एसक्यूएल कोड को हाथ से जोड़ देता है और आप सी # कोड का उपयोग करके कोड को मान्य करना चाहते हैं, तो SQL सर्वर पर निष्पादन से पहले, आप इस तरह एक विधि बना सकते हैं:

using Microsoft.Data.Schema.ScriptDom; using Microsoft.Data.Schema.ScriptDom.Sql; public class SqlParser { public List<string> Parse(string sql) { TSql100Parser parser = new TSql100Parser(false); IScriptFragment fragment; IList<ParseError> errors; fragment = parser.Parse(new StringReader(sql), out errors); if (errors != null && errors.Count > 0) { List<string> errorList = new List<string>(); foreach (var error in errors) { errorList.Add(error.Message); } return errorList; } return null; } } 

SSMS में ऐसा करने का एक तरीका है

यदि आप एसक्यूएल प्रोफाइलर का उपयोग करते हैं, तो आप देखेंगे कि यह SET PARSEONLY ON , फिर एसक्यूएल और उसके बाद SET PARSEONLY OFF और क्वेरी को संकलित या निष्पादित किए बिना किसी भी त्रुटि बढ़ जाती है।

 SET PARSEONLY ON; SELECT * FROM Table; --Query To Parse SET PARSEONLY OFF; 

PARSEONLY

मैंने सी # से यह कभी भी कोशिश नहीं की है लेकिन मुझे कोई कारण नहीं दिखता कि यह काम क्यों नहीं करना चाहिए, ये सभी के बाद एसएसएमएस से काम करता है

जैसा कि मार्टिन स्मिथ ने टिप्पणी में बताया था, आप SET NOEXEC ON उपयोग कर सकते हैं

एमएसडीएन ने निम्नलिखित दोनों आज्ञाओं के बारे में बताया है

जब सेट नेएक्सईक चालू है, तो SQL सर्वर प्रत्येक बैच को ट्रांसएक्ट-एसक्यूएल स्टेटमेंट करता है लेकिन उन्हें निष्पादित नहीं करता है। जब सेट नॉक्सईक बंद हो जाता है, तो संकलन के बाद सभी बैचों को निष्पादित किया जाता है।

जब SET PARSEONLY चालू है, तो SQL सर्वर केवल स्टेटमेंट को पार्स करता है। जब सेट पार्टसिनरी बंद हो जाता है, तो SQL सर्वर कथन संकलित करता है और निष्पादित करता है।

यह इंगित करता है कि NOEXEC क्वेरी को भी संकलित करेगा जहां PARSEONLY नहीं होगा। तो NOEXEC त्रुटियों को पकड़ सकता है, जो PARSEONLY में नहीं है। उपयोग समान है

 SET NOEXEC ON; SELECT * FROM Table; --Query To Parse SET NOEXEC OFF; 

NOEXEC

मुझे पता है कि सवाल एनआईटी 2.0 के बारे में था, लेकिन यह किसी के लिए दिलचस्प हो सकता है। माइक्रोसॉफ्ट एसक्यूएल सर्वर के नवीनतम संस्करण में प्रश्नों का सत्यापन थोड़ा बदल गया है। नामस्थान Microsoft.SqlServer.TransactSql.ScriptDom है। SQL सर्वर। ट्रांन्सैक्ट Sql.ScriptDom बजाय Microsoft.Data.Schema.ScriptDom

यह लाइब्रेरी कहाँ ढूंढें?

लायब्रेरी का पथ %programfiles(x86)%\Microsoft SQL Server\120\SDK\Assemblies यदि आपको यह लाइब्रेरी और Microsoft SQL Server स्थापित नहीं है, तो 120 से 110 या 100 बदलने का प्रयास करें और संबंधित पार्सर ( TSql110Parser उपयोग करें या TSql100Parser क्रमशः)।

कैसे इस्तेमाल करे?

मेरे पास दो एक्सटेंशन हैं: पहला एक्सटेंशन यह जांचता है कि इनपुट स्ट्रिंग एक मान्य SQL क्वेरी है और दूसरे को पार्सिंग से त्रुटियों के लिए उपयोग किया जा सकता है।

 using Microsoft.SqlServer.TransactSql.ScriptDom; using System.Collections.Generic; using System.IO; using System.Linq; public static class SqlStringExtensions { public static bool IsValidSql(this string str) { return !str.ValidateSql().Any(); } public static IEnumerable<string> ValidateSql(this string str) { if (string.IsNullOrWhiteSpace(str)) { return new[] { "SQL query should be non empty." }; } var parser = new TSql120Parser(false); IList<ParseError> errors; using (var reader = new StringReader(str)) { parser.Parse(reader, out errors); } return errors.Select(err => err.Message); } } 

इसके अलावा, मैं जांचता हूं कि इनपुट एसक्यूएल क्वेरी रिक्त या खाली नहीं है, क्योंकि पार्सर को लगता है कि खाली स्ट्रिंग पूरी तरह से वैध है (और मैं इसका न्याय नहीं करता)।

कैसे परीक्षण करें?

तीन NUnit परीक्षण हैं जो यह दिखाते हैं कि आप इस एक्सटेंशन का उपयोग कैसे कर सकते हैं।

 using System.Collections.Generic; using System.Linq; using NUnit.Framework; [TestFixture] public class SqlStringExtensionsTests { [Test] public void ValidateSql_InvalidSql_ReturnsErrorMessages() { // this example doesn't contain "," between the field names string invalidSql = "SELECT /*comment*/ " + "CustomerID AS ID CustomerNumber FROM Customers"; IEnumerable<string> results = invalidSql.ValidateSql(); Assert.AreNotEqual(0, results.Count()); } [Test] public void IsValidSql_ValidSql_ReturnsTrue() { string validSql = "SELECT /*comment*/ " + "CustomerID AS ID, CustomerNumber FROM Customers"; bool result = validSql.IsValidSql(); Assert.AreEqual(true, result); } [Test] public void IsValidSql_InvalidSql_ReturnsFalse() { // this example doesn't contain "," between the field names string invalidSql = "SELECT /*comment*/ "+ " CustomerID AS ID CustomerNumber FROM Customers"; bool result = invalidSql.IsValidSql(); Assert.AreEqual(false, result); } } 

'मान्य' एसक्यूएल मतलब क्या है? वाक्यविन्यास या परिणाम?

वाक्यविन्यास को मान्य करने का एकमात्र निश्चित तरीका एसक्यूएल सर्वर में एसक्यूएल निष्पादित है। क्या आपने एक ट्रांजैक्शन में एसक्यूएल चलाने पर विचार किया है और फिर अंत में रोलबैक करते हैं?

 Begin Transaction --execute your code between the 'Begin Transaction' and the 'rollback' keywords. ... --example Insert into mytable(ID)Values(2) ... Rollback 

रोलबैक पर एमएसडीएन दस्तावेज़ीकरण