2008-11-12 23 views
5

क्या कोई ऐसा एप्लिकेशन है, जो संग्रहीत प्रक्रियाओं (SQL सर्वर 2000) के किसी दिए गए सेट को पार्स कर सकता है और इसमें सभी टेबल और संबंधित कॉलम का उपयोग किया जा रहा है। संग्रहीत प्रक्रिया में विभिन्न डेटाबेस से टेबल हो सकते हैं।संग्रहित प्रक्रियाओं के लिए एसक्यूएल टेबल और कॉलम पार्सर

आउटपुट TableA की तरह होना चाहिए Columna columnC columnD

TableB columnE columnF columnG

मैं किसी भी एक रुचि http://tsqlparsergdr.codeplex.com

का उल्लेख कर सकते डेटाबेस संस्करण GDR का उपयोग कर एक छोटा सा आवेदन में लिखा है
+0

मुझे नहीं लगता कि नियमित अभिव्यक्ति सही समाधान है, आपको इसके बजाय एक एसक्यूएल पार्सर चाहिए, इस आलेख को देखें: http://www.dpriver.com/blog/सूची-का-डेमो-चित्रण-कैसे-उपयोग-सामान्य-एसक्यूएल-पार्सर/प्राप्त-कॉलम-और-टेबल-इन-एसक्यूएल-स्क्रिप्ट-नेट-वर्जन/ –

उत्तर

1

आप SHOWPLAN_ALL सेटिंग का उपयोग कर सकते हैं और आउटपुट पार्स कर सकते हैं।

+0

आउटपुट के रूप में सभी टेबल और संबंधित कॉलम प्राप्त करने के लिए आवेदन चाहता था, यह एक अच्छा सुझाव है, लेकिन यह मेरे लिए काम नहीं करता है। – rsapru

+0

कृपया "काम नहीं करता" परिभाषित करें। या बेहतर अभी तक - परिभाषित करें कि क्या काम करता है :) –

+0

यह मेरे लिए क्यों काम नहीं करता है क्योंकि अधिकांश संग्रहीत प्रक्रियाओं पर मैं काम कर रहा हूं, मेरे पास उन सभी डीबी का उल्लेख नहीं है। और SHOWPLAN_ALL केवल तभी काम करता है जब आपके पास सभी डीबी मौजूद हों। यह एक तरह का विश्लेषण कार्य है जिसे मुझे करने की ज़रूरत है। – rsapru

2

नहीं एक ठोस समाधान के साथ भेज दिया है - लेकिन सोचा था की एक लाइन।

एक संभावित समाधान के रूप में sysdepends माना जाता है - लेकिन सभी पर निर्भर ऑब्जेक्ट जानकारी रखने में कुख्यात रूप से अविश्वसनीय है।

लेकिन लेक्स/वाईएसी कुछ व्युत्पन्न कैसे हुआ? कुछ वाणिज्यिक पार्सर्स उदा।

http://www.sqlparser.com/download.php

खुला स्रोत कार्यान्वयन के लिए देखा नहीं लेकिन मुझे लगता है मुझे लगता है कि मार्ग के लिए विचार करेंगे।

http://www.google.com/search?hl=en&q=sql+lex+yacc+parse

ANSI SQL के लिए

BNF वाक्यविन्यास यहां पाया जा सकता: यहाँ कैसे मैं अपने खोज शुरू कर दिया है पसंद का एक लेक्स कार्यान्वयन के साथ

http://savage.net.au/SQL/

, यह यहां से अपेक्षाकृत सीधे आगे की इंजीनियरिंग समस्या प्रतीत होता है। (कुछ heavylifting साथ यद्यपि आप एमएस एसक्यूएल विस्तार का समर्थन करना चाहते हैं)

+0

http://www.sqlparser.com/ download.php बहुत अच्छा लग रहा है लेकिन इसे खरीद नहीं सकता है। कुछ प्रकार के ओपन सोर्स या फ्रीवेयर की आवश्यकता है। – rsapru

+0

O'Reilly की YACC और Lex पुस्तक में yacc पर आधारित SQL पार्सर का नमूना है। (http://safari.oreilly.com/9781565920002/sql_parser_code) आपको अन्य सार्वजनिक कार्यान्वयन मिल सकते हैं। यह कि एक वाणिज्यिक उत्पाद भी मौजूद है आपको बताता है कि यह एक दुर्लभ संसाधन है। – stephbu

+1

अंत में डेटाबेस संस्करण जीडीआर का उपयोग कर एक बनाने में सक्षम था .. http://tsqlparsergdr.codeplex.com – rsapru

-1

आप कर सकते थे फोन संग्रहित प्रक्रियाओं को प्रोग्राम के (एक विकास के वातावरण में) और जिसके परिणामस्वरूप कॉलम मिलता है। कॉलिंग सम्मिलन और अद्यतन प्रक्रिया से बचने के लिए हो सकता है कि आपके पास नामकरण सम्मेलन हो। आपको सही पैरामीटर भी सेट करने के लिए रास्ता खोजना होगा।

नोट: मुझे लगता है कि एक 100% विश्वसनीय समाधान तरह से संग्रहीत प्रक्रिया काम (कर सकते हैं) की वजह से तकनीकी रूप से असंभव है,।इस उदाहरण को

देखो:

[...] 
@MyDate datetime 

AS 

    IF (day(@MyDate) = 1) 
    BEGIN 
     SELECT * FROM MyFirstTable 
     RETURN 
    END 

    IF (@MyDate > getdate()) 
     SELECT MyID, MyText FROM MySecondTable WHERE ADate > @MyDate 
    ELSE 
     EXEC Other_StoredProcedure @MyType, @MyDate 

तो दो समस्याएं हैं: जिसके परिणामस्वरूप कॉलम अलग हो सकता है और आप रिकर्सिवली अन्य संग्रहित प्रक्रियाओं का पालन करना होगा।

+0

आउटपुट के पार्सिंग में व्यवहार्य होने के लिए बहुत अधिक त्रुटियां हैं। सामान्य नोट के साथ सहमति दें '- यह मानते हुए कि आप सभी स्पष्ट रूप से घोषित करों का विश्लेषण करेंगे, फिर भी गतिशील एसक्यूएल तारों के माध्यम से प्रक्रियाओं को स्पष्ट रूप से लागू करने की संभावना है - जो आपको फिर से पार्स करना होगा – stephbu

+0

क्षमा करें, शायद मैं था अस्पष्ट। मेरा मतलब आउटपुट को "पार्सिंग" नहीं करना है, लेकिन परिणामस्वरूप कॉलम सामान्य तरीके से प्राप्त करना, बस संग्रहीत प्रक्रिया को कॉल करना। मैं अपना जवाब संपादित करूंगा। – splattne

+0

ठीक है, शायद मैंने सवाल को गलत समझा है। लेकिन यह मेरे लिए स्पष्ट नहीं था, किस rsapru का मतलब है "मुझे बताओ कि उस तालिका के भीतर सभी टेबल और कॉलम का उपयोग किया जा रहा है।" – splattne

0

sp_depends मदद करनी चाहिए

+0

की आवश्यकता नहीं है यह मेरे लिए काम नहीं करता है – rsapru

1

Regex का उपयोग करके अपने मौजूदा जरूरतों को पूरा करने के लिए एक छोटा सा आवेदन बनाने का फैसला किया।

आपके सभी प्रतिक्रियाओं के लिए धन्यवाद।

1

sp_depends मेरे लिए पूरी तरह से काम किया। यह दिखाता है कि मेरे परिवर्तन

+0

यह अब बहुत बेहतर काम करता है (SQL सर्वर 2008)। क्यू को SQL Server 2000 टैग किया गया है, हालांकि निर्भरता बहुत रोपी हैं। –

+0

क्षमा करें, उसे नहीं देखा – DonP

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

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