كيف يمكنني التعرف بسرعة على أحدث الإجراءات المخزنة التي تم تعديلها في SQL Server

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

سؤال

أحتاج إلى ترحيل الإجراءات المخزنة المعدلة يدويًا من مثيل قاعدة بيانات DEV SQL Server 2005 إلى مثيل TEST.باستثناء التغييرات التي أقوم بترحيلها، فإن قواعد البيانات لها نفس المخططات.كيف يمكنني التعرف بسرعة على الإجراءات المخزنة التي تم تعديلها في قاعدة بيانات DEV للانتقال إلى مثيل TEST؟

أفترض أنه يمكنني كتابة استعلام مقابل بعض جداول النظام لعرض كائنات قاعدة البيانات من نوع الإجراء المخزن، والفرز حسب نوع آخر بيانات تم تعديلها أو تجميعها، لكنني لست متأكدًا.ربما هناك نوع من المرافق المجانية التي يمكن لأي شخص أن يوجهني إليها.

شكرا لك مقدما،

بوب

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

المحلول

بدلاً من استخدام كائنات النظام التي لم يعد من المستحسن استخدام sys.procedures

select name,create_date,modify_date
from sys.procedures
order by modify_date desc

يمكنك تنفيذ جملة المكان بنفسك ولكن هذا سيدرجها بترتيب تاريخ التعديل تنازليًا

نصائح أخرى

ربما قام بوب أومالي بحل مشكلته منذ وقت طويل ولكن نأمل أن يجد القراء الجدد هذا مفيدًا.

هناك بعض الحالات الخاصة التي قد لا تعطي فيها البرامج النصية نتائج مثالية.

أحدهما هو حذف الإجراءات المخزنة أو الكائنات الأخرى في بيئة التطوير - لن تتمكن من اكتشاف ذلك باستخدام طرق عرض النظام لأن الكائن لن يكون موجودًا هناك بعد الآن.

كما أنني لست متأكدًا حقًا من أن هذا الأسلوب يمكن أن يعمل مع التغييرات مثل الأذونات وما شابه ذلك.

في مثل هذه الحالات، من الأفضل استخدام بعض أدوات الطرف الثالث للتأكد من عدم تفويت أي شيء.

لقد استخدمت بنجاح فرق ApexSQL في الماضي لمهام مماثلة وعملت بشكل جيد حقًا على قواعد بيانات كبيرة تحتوي على أكثر من 1000 كائن ولكن لا يمكنك أن تخطئ في مقارنة SQL المذكورة بالفعل هنا أو في الأساس أي أداة أخرى موجودة في السوق.

تنصل:أنا لست تابعًا لأي من البائعين الذين أذكرهم هنا ولكني أستخدم مجموعتي الأدوات (Apex وRG) في الشركة التي أعمل بها.

يمكنك تنفيذ هذا الاستعلام للعثور على جميع الإجراءات المخزنة التي تم تعديلها في آخر عدد x من الأيام:

SELECT name
FROM sys.objects
WHERE type = 'P'
    AND DATEDIFF(D,modify_date, GETDATE()) < X

على الرغم من أن هذا ليس مجانيًا، فقد حظيت بخبرة جيدة في استخدام Red-Gates أداة مقارنة SQL.لقد عملت بالنسبة لي في الماضي.لديهم نسخة تجريبية مجانية متاحة والتي قد تكون جيدة بما يكفي لحل مشكلتك الحالية.

يمكنك أيضًا استخدام مقتطف التعليمات البرمجية التالي

USE AdventureWorks2008;

GO

SELECT SprocName=name, create_date, modify_date

FROM sys.objects

WHERE type = 'P' 

AND name = 'uspUpdateEmployeeHireInfo'

GO

يمكنك استخدام نوع الاستعلام التالي للعثور على الإجراءات المخزنة المعدلة، ويمكنك استخدام أي رقم ثم 7 حسب احتياجاتك

حدد الاسم من sys.objects حيث النوع = 'p' و datediff (d ، modify_date ، getDate ()) <7

هناك العديد من أدوات مقارنة قواعد البيانات.أحد الأشياء التي أحبها دائمًا هو SQLCompare بواسطة البوابة الحمراء.

يمكنك أيضًا تجربة استخدام:

SELECT name
FROM sys.objects
WHERE modify_date > @cutoffdate

في SQL 2000، لم يكن هذا ليعمل دائمًا، لأن استخدام ALTER لم يقم بتحديث التاريخ بشكل صحيح، ولكن في عام 2005 أعتقد أن هذه المشكلة قد تم حلها.

أستخدم أداة مقارنة SQL بنفسي، لذا لا يمكنني ضمان هذه الطريقة بنسبة 100%

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top