यह वह सूची प्राप्त करेगा जिसके बाद आप हैं, हालांकि यह आपकी मदद नहीं करेगा यदि आपके पास ऐसे कॉलम संदर्भ हैं जो गतिशील SQL में एम्बेडेड हैं (और ऐसे संदर्भ नहीं मिल सकते हैं जो आस्थगित नाम समाधान पर भरोसा करते हैं)। SQL सर्वर DMV आउटपुट के साथ आने के लिए संग्रहीत कार्यविधि के टेक्स्ट को पार्स नहीं करता है।
COLLATE
के साथ अभी प्रयास करें उन मामलों से निपटने के लिए क्लॉज जहां आपके पास एक ही सर्वर पर अलग-अलग कॉलेशन वाले डेटाबेस हैं।
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'UNION ALL
SELECT
[database] = ''' + REPLACE(name, '''', '''''') + ''',
[procedure] = QUOTENAME(s.name) + ''.'' + QUOTENAME(p.name)
COLLATE Latin1_General_CI_AI,
[table] = QUOTENAME(referenced_schema_name) + ''.''
+ QUOTENAME(referenced_entity_name)
COLLATE Latin1_General_CI_AI,
[column] = QUOTENAME(referenced_minor_name)
COLLATE Latin1_General_CI_AI
FROM ' + QUOTENAME(name) + '.sys.schemas AS s
INNER JOIN ' + QUOTENAME(name) + '.sys.procedures AS p
ON s.[schema_id] = p.[schema_id]
CROSS APPLY ' + QUOTENAME(name)
+ '.sys.dm_sql_referenced_entities'
+ '(QUOTENAME(s.name) + ''.'' + QUOTENAME(p.name), N''OBJECT'') AS d
WHERE d.referenced_minor_id > 0'
FROM sys.databases
WHERE database_id > 4
AND [state] = 0;
SET @sql = STUFF(@sql,1,11,'');
EXEC sp_executesql @sql;
साथ ही CROSS APPLY
यदि आपके पास 80 संगतता मोड में डेटाबेस हैं तो सिंटैक्स काम नहीं करेगा। बस सुनिश्चित करें कि आप ऐसे डेटाबेस में कोड निष्पादित नहीं करते हैं और इसे ठीक काम करना चाहिए (भले ही कुछ लक्ष्य डेटाबेस 80 में हों)।