2008-09-04 18 views
15

एक एसक्यूएल diff उपकरण खोजने में असमर्थ जो मेरी जरूरतों को पूरा करता है, मैं अपना खुद का लिख ​​रहा हूं। INFORMATION_SCHEMA और sys तालिकाओं के बीच, मेरे पास अधिकतर पूर्ण कार्य संस्करण है। लेकिन एक बात जो मुझे मेटाडेटा में नहीं मिल पाती है वह परिभाषा ट्रिगर है, आपको पता है, वास्तविक SQL कोड। क्या मैं कुछ देख रहा हूँ?मैं SQL सर्वर में किसी ट्रिगर की परिभाषा (बॉडी) कैसे प्राप्त कर सकता हूं?

धन्यवाद।


धन्यवाद, पीट, मुझे इसके बारे में पता नहीं था!

स्कॉट, मैं बहुत बुनियादी होस्टिंग पैकेज के साथ काम कर रहा हूं जो डीबी से दूरस्थ कनेक्शन की अनुमति नहीं देता है। मुझे रेडगेट पर चश्मे से पता नहीं है (जिसे मैं वैसे भी बर्दाश्त नहीं कर सकता) चाहे वे इसके लिए एक समाधान प्रदान करें, और यद्यपि एपीआई भी बाहर है (जैसे एपेक्स से एक), मैंने नहीं देखा एक ऐसे समाधान में निवेश करने में इंगित करें जो अभी भी मेरे हिस्से पर अधिक प्रोग्रामिंग की आवश्यकता होगी। :)

मेरा समाधान साइट पर एक एएसपीएक्स पृष्ठ छोड़ना है जो "स्कीमा सेवा" के रूप में कार्य करता है, एकत्रित मेटाडेटा को एक्सएमएल के रूप में लौटाता है। मैंने एक छोटा AJAX ऐप स्थापित किया जो किसी भी सूची में कैटलॉग उदाहरणों की तुलना करता है और diffs दिखाता है। यह सही नहीं है, लेकिन मेरे लिए एक बड़ा कदम आगे है।

फिर से धन्यवाद!

+0

पीट क्या लिखा है पर विस्तार करने के लिए, 'sp_helptext', किसी भी ट्रिगर, देखने के लिए, संग्रहीत प्रक्रिया, समारोह के पीछे एसक्यूएल खुलासा करने के लिए बहुत उपयोगी है आदि 2005 के लिए –

उत्तर

15

sp_helptext एसक्यूएल प्राप्त करने के लिए काम करता है जो ट्रिगर बनाता है।

सिस्कोमेंट दृश्य में टेक्स्ट कॉलम में ऑब्जेक्ट सृजन के लिए उपयोग किए गए एसक्यूएल भी शामिल हैं।

SELECT 
    sysobjects.name AS trigger_name, 
    OBJECT_NAME(parent_obj) AS table_name, 
    OBJECT_DEFINITION(id) AS trigger_definition 
FROM sysobjects 
WHERE sysobjects.type = 'TR' 
14

2005 और 2008 के लिए आप OBJECT_DEFINITION() समारोह

+2

..work - 2012 - https: // MSDN .microsoft.com/en-us/पुस्तकालय/ms176090% 28v = sql.110% 29.aspx – Milan

10
SELECT  
    DB_NAME() AS DataBaseName,     
    dbo.SysObjects.Name AS TriggerName, 
    dbo.sysComments.Text AS SqlContent 
FROM 
    dbo.SysObjects INNER JOIN 
     dbo.sysComments ON 
     dbo.SysObjects.ID = dbo.sysComments.ID 
WHERE 
    (dbo.SysObjects.xType = 'TR') 
    AND 
    dbo.SysObjects.Name = '<YourTriggerName>' 
1

उपयोग कर सकते हैं SQLMenace के जवाब पर विस्तार करने के लिए, यहाँ एक डेटाबेस से सभी ट्रिगर और उनके वर्णनों के वापस जाने के लिए एक सरल प्रश्न है अपने नाम और शरीर के साथ क्वेरी रिटर्न ट्रिगर।

Select 
    [tgr].[name] as [trigger name], 
    [tbl].[name] as [table name] , 
    OBJECT_DEFINITION(tgr.id) body 

    from sysobjects tgr 

    join sysobjects tbl 
    on tgr.parent_obj = tbl.id 

WHERE tgr.xtype = 'TR' 
संबंधित मुद्दे