كيف يمكنني الحصول على قائمة الجداول المتضررة من خلال مجموعة من الإجراءات المخزنة?
-
02-07-2019 - |
سؤال
لدي قاعدة بيانات ضخمة مع بعض 100 الجداول وبعض 250 الإجراءات المخزنة.أريد أن أعرف قائمة الجداول المتضررين من مجموعة فرعية من الإجراءات المخزنة.على سبيل المثال, لدي قائمة من 50 الإجراءات المخزنة من 250 و أريد أن أعرف قائمة الجداول التي سوف تتأثر بهذه 50 الإجراءات المخزنة.هل هناك أي طريقة سهلة للقيام بذلك ، وغيرها من قراءة جميع الإجراءات المخزنة وإيجاد قائمة الجداول يدويا ؟
PS:أنا باستخدام SQL Server 2000 و SQL Server 2005 العملاء من أجل هذا.
المحلول
هذا من شأنه أن يكون لديك SQL Server الاستعلام:
SELECT
[NAME]
FROM
sysobjects
WHERE
xType = 'U' AND --specifies a user table object
id in
(
SELECT
sd.depid
FROM
sysobjects so,
sysdepends sd
WHERE
so.name = 'NameOfStoredProcedure' AND
sd.id = so.id
)
نأمل أن يكون هذا يساعد شخص ما.
نصائح أخرى
sp_depends 'StoredProcName' سيعود الكائن اسم و نوع الكائن الذي proc المخزنة يعتمد على.
تحرير: أود @كجم إجابة أفضل.أكثر مرونة IMHO.
كنت تفعل ذلك بهذه الطريقة في SQL 2005 (ضافه "و" الخط إذا كنت تريد فقط لفترة معينة proc):
SELECT
[Proc] = SCHEMA_NAME(p.schema_id) + '.' + p.name,
[Table] = SCHEMA_NAME(t.schema_id) + '.' + t.name,
[Column] = c.name,
d.is_selected,
d.is_updated
FROM sys.procedures p
INNER JOIN sys.sql_dependencies d
ON d.object_id = p.object_id
AND d.class IN (0,1)
INNER JOIN sys.tables t
ON t.object_id = d.referenced_major_id
INNER JOIN sys.columns c
ON c.object_id = t.object_id
AND c.column_id = d.referenced_minor_id
WHERE p.type IN ('P')
-- AND p.object_id = OBJECT_ID('MyProc')
ORDER BY
1, 2, 3
واحد جدا الغازية خيار الحصول على نسخة من قاعدة البيانات و وضع الزناد على كل طاولة الذي يسجل أن شيئا ما حدث.ثم تشغيل جميع ليرة سورية.إذا كنت لا تستطيع أن تفعل الكثير من تعديل DB أنه متعود العمل
أيضا, تأكد من إضافة تسجيل إلى القائمة مشغلات بدلا من استبدالها تسجيل الدخول إذا كنت تريد أيضا الجداول التي SP تأثير عبر المشغلات.