كيف يمكنني الحصول على تعريف (نص) المشغل في SQL Server؟
-
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'