यह दोनों तालिकाओं और संग्रहीत कार्यविधियों के लिए सूचना स्कीमा का उपयोग करता है। आप फ़ंक्शन जोड़ने के लिए ROUTINE_TYPE शर्त को बदल सकते हैं या उससे छुटकारा पा सकते हैं, और आप तालिका प्रकार को वापस देखने के लिए बदल सकते हैं।
यह उत्तर यह जांच कर अपने परिणाम उत्पन्न करता है कि संग्रहीत प्रक्रिया किस तालिका पर निर्भर करती है। मुझे लगता है कि यह एक और अधिक सटीक परिणाम होगा, फिर जांच कर रहा है कि कोई नाम क्वेरी टेक्स्ट में है या नहीं। यदि प्रक्रिया एक टिप्पणी अनुभाग में एक तालिका को संदर्भित करती है, तो यह परिणाम पहली क्वेरी में नहीं लौटाया जाएगा, बल्कि दूसरे और दिए गए अन्य उत्तरों में होगा।
SELECT t.TABLE_NAME, s.ROUTINE_NAME
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.ROUTINES s ON
s.ROUTINE_NAME IN (SELECT referencing_entity_name
FROM sys.dm_sql_referencing_entities(TABLE_SCHEMA + '.' + TABLE_NAME, 'OBJECT'))
AND s.ROUTINE_TYPE = 'PROCEDURE'
WHERE t.TABLE_TYPE = 'BASE TABLE'
संपादित करें :यहां बताया गया है कि फ़ंक्शन के बिना निर्भरता कैसे प्राप्त करें। (मुझे यह तरीका सबसे अच्छा लगता है)
SELECT DISTINCT t.name [TableName], p.name [ProcedureName]
FROM sys.objects t
LEFT JOIN sys.sql_dependencies d ON
d.referenced_major_id = t.object_id
LEFT JOIN sys.objects p ON
p.object_id = d.object_id
AND p.type = 'p'
WHERE t.type = 'u'
यदि आपका विशिष्ट उपयोग किसी तालिका के नाम से मेल खाने वाली स्ट्रिंग को खोजने के लिए है, तो नीचे काम करेगा:
SELECT t.TABLE_NAME, s.ROUTINE_NAME
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.ROUTINES s
ON CHARINDEX(t.TABLE_NAME, s.ROUTINE_DEFINITION) > 0
AND s.ROUTINE_TYPE = 'PROCEDURE'
WHERE t.TABLE_TYPE = 'BASE TABLE'