كيف يمكنني الحصول على تعريف (نص) المشغل في SQL Server؟

StackOverflow https://stackoverflow.com/questions/44034

  •  09-06-2019
  •  | 
  •  

سؤال

غير قادر على العثور على أداة فرق SQL التي تلبي احتياجاتي، فأنا أكتب أداة خاصة بي.بين INFORMATION_SCHEMA وجداول sys، لدي نسخة عمل كاملة في الغالب.لكن الشيء الوحيد الذي لا يمكنني العثور عليه في البيانات الوصفية هو تعريف من المشغل، كما تعلمون، رمز SQL الفعلي.هل أطل على شيء ما؟

شكرًا.


شكرا بيت، لم أكن أعرف عن ذلك!

سكوت، أنا أعمل مع حزم استضافة أساسية للغاية لا تسمح بالاتصالات عن بعد بقاعدة البيانات.لا أعرف من المواصفات الموجودة على RedGate (والتي لا أستطيع تحمل تكاليفها على أي حال) ما إذا كانت توفر حلاً بديلاً لذلك، وعلى الرغم من وجود واجهات برمجة التطبيقات (API) هناك أيضًا (مثل تلك الموجودة في Apex)، إلا أنني لم أر أشير إلى الاستثمار في حل لا يزال يتطلب المزيد من البرمجة من جهتي.:)

الحل الذي أقترحه هو إسقاط صفحة ASPX على الموقع والتي تعمل كنوع من "خدمة المخطط"، مع إرجاع البيانات التعريفية المجمعة بتنسيق XML.لقد قمت بإعداد تطبيق AJAX صغير يقارن أي عدد من مثيلات الكتالوج بمثيل رئيسي ويعرض الاختلافات.إنها ليست مثالية، ولكنها خطوة كبيرة إلى الأمام بالنسبة لي.

شكرًا لك مرة أخرى!

هل كانت مفيدة؟

المحلول

يعمل sp_helptext على الحصول على SQL الذي يشكل المشغل.

يحتوي عمود النص في عرض syscomments أيضًا على SQL المستخدم لإنشاء الكائن.

نصائح أخرى

لعامي 2005 و 2008 يمكنك استخدام OBJECT_DEFINITION() وظيفة

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>'

للتوسع في إجابة SQLMenace، إليك استعلام بسيط لإرجاع جميع المشغلات وتعريفاتها من قاعدة البيانات:

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' 

مشغل إرجاع هذا الاستعلام باسمه ونصه.

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'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top