একটি বিশেষ কলামের উপর নির্ভরতা সন্ধান করা (আধুনিক উপায়, সিস্টেপডাইন্ডেজ ব্যবহার না করে)


14

আমাকে এমন সমস্ত দর্শন এবং সঞ্চিত পদ্ধতিগুলি সন্ধান করতে হবে যা কেবলমাত্র একটি নির্দিষ্ট টেবিল নয়, একটি টেবিলের নির্দিষ্ট কলামে গ্রাস করে।

নিম্নলিখিতটি "কাজ করে" মনে হচ্ছে, তবে এই পদ্ধতিটি সম্পর্কে সতর্কতা অবলম্বন করার জন্য অনেক সতর্কতা রয়েছে (বিভিন্ন কারণে নির্ভরযোগ্য নয়, শীঘ্রই হ্রাস করা হবে ইত্যাদি):

SELECT object_name(so.id) TableName, sc.name ColumnName, OBJECT_NAME(sd.id) DependentObjectName,
(SELECT xtype FROM sysobjects so WHERE so.id = sd.id) Object_Type
FROM sysobjects so INNER JOIN syscolumns sc
ON so.id = sc.id
INNER JOIN sysdepends sd
ON so.id = sd.depid and sc.colid = sd.depnumber
WHERE 
    object_name(so.id) = 'MyTableName'
AND sc.name = 'MyColumnName'
order by object_name(so.id), Object_Type

কিছু বিকল্প পন্থা যা প্রায়শই উল্লেখ করা হয় সেগুলি হল sys.sql_d dependency এবং sys.sql_expression_d dependency, তবে এগুলির কোনওটিরই কলাম স্তরের গ্রানুলারটি নেই।

কেউ কি এটি করার একটি উপায় জানেন? (অথবা এটি আপনি আক্ষরিকভাবে করতে পারবেন না তা আপনি যদি নিশ্চিতভাবে জানেন তবে এটি জানার জন্য সহায়ক হবে))


1
এই টিপের উদাহরণ 2 কলাম স্তরের অনুসন্ধানের জন্য।

উত্তর:


13

কলাম নির্ভরতা দেখার জন্য এখানে একটি অ্যাডভেঞ্চার ওয়ার্কসের উদাহরণ।

SELECT ReferencingObject = SCHEMA_NAME(o1.schema_id) + '.' + o1.name,
       ReferencedObject = SCHEMA_NAME(o2.schema_id) + '.'
                          + ed.referenced_entity_name,
       ColumnName = c.name,
       ReferencedObjectType = o2.type,
       ReferencingObjecType = o1.type
FROM   AdventureWorks2012.sys.sql_expression_dependencies ed
       INNER JOIN AdventureWorks2012.sys.objects o1
               ON ed.referencing_id = o1.object_id
       INNER JOIN AdventureWorks2012.sys.objects o2
               ON ed.referenced_id = o2.object_id
       INNER JOIN AdventureWorks2012.sys.sql_dependencies d
               ON ed.referencing_id = d.object_id
                  AND d.referenced_major_id = ed.referenced_id
       INNER JOIN sys.columns c
               ON c.object_id = ed.referenced_id
                  AND d.referenced_minor_id = c.column_id
WHERE  SCHEMA_NAME(o1.schema_id) + '.' + o1.name = 'HumanResources.vEmployee' AND c.name = 'JobTitle'
ORDER  BY ReferencedObject,
          c.column_id; 

এটি দুর্দান্ত দেখাচ্ছে। আপনি কি এই মন্তব্য করতে পারবেন যে এটি সবই বা পসিবিলি একই "বাসি, পুরানো, পুরানো" সমস্যাগুলি সিস্টেডপেন্ডসের মতো ভুগছে কিনা? দেখুন: sqlblog.com/blogs/aaron_bertrand/archive/2008/09/09/…
tbone

ALSO: কোনও ধারণা যদি এটি নেস্টেড নির্ভরতাগুলি সমাধান করবে? উদাহরণস্বরূপ: একটি প্রোড একটি ভিউয়ের উপর নির্ভর করে যা টেবলের উপর নির্ভর করে OL এবং ফলাফলে proc প্রদর্শন করে?
tbone

আমি কেবল বুঝতে পারি না whereশর্ত অনুসারে কোন উদ্দেশ্যটি পরিবেশন করা হয় । টিএস নির্দিষ্ট কলামের উপর নির্ভরশীলতা খুঁজতে চেয়েছিল। আমি মনে করি শর্তটি সীমাবদ্ধ হওয়া উচিত c.nameএবং ed.referenced_id/ ed.referenced_entity_name, তা হওয়া উচিত নয়?
pkuderov

এখানে 2019 - sys.sql_dependenciesএখন রক্ষণাবেক্ষণ মোডে রয়েছে, এবং মাইক্রোসফ্ট টিম কেবলমাত্র এটি ব্যবহারের পরামর্শ দিচ্ছে sys.sql_expression_dependencies। এটি বলা হচ্ছে - এটি sys.sql_expression_dependenciesএকই স্তরের বিশদ ক্যাপচার বলে মনে হচ্ছে না ।
10762409 বলেছেন মোনিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.