কোনও নির্দিষ্ট সারণী উল্লেখ করে কীভাবে সমস্ত সঞ্চিত পদ্ধতি চিহ্নিত করা যায়


136

আমি পরীক্ষার উদ্দেশ্যে বিকাশের পরিবেশের উপর একটি সারণী তৈরি করেছি এবং এমন কয়েকটি সংখ্যক এসপি রয়েছে যা এই টেবিলটি সরিয়ে দিচ্ছে। এখন আমাকে এই টেবিলটি ফেলে দিতে হবে এবং পাশাপাশি সমস্ত এসপিগুলির সনাক্ত করতে হবে যা এই টেবিলটি উল্লেখ করছে। আমি সমস্ত এসপি এর তালিকা খুঁজে পেতে অসুবিধায় পড়ছি। টেবিলের নামটি 'x' এবং ডাটাবেসটি এসকিএল সার্ভার 2005 বলে ধরে ধরে অনুগ্রহ করে কিছু প্রশ্নের পরামর্শ দিন suggest




1
বিশেষজ্ঞদের কাছে: নন-এমএস এসকিউএল সার্ভারের জন্য কীভাবে?
ডায়ান

উত্তর:


259
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'

বিটিডাব্লু - এই ধরণের প্রশ্নের জন্য একটি সহজ সংস্থান: এসকিউএল সার্ভার সিস্টেম ক্যাটালগ FAQ জিজ্ঞাসা করা


3
এটি অ্যাক্সেস করার ROUTINE_DEFINITIONমাধ্যমে কি করার কোনও কারণ আছে INFORMATION_SCHEMA.ROUTINES?
মেরি

1
@ মেরি - এসকিউএল-সার্ভার ২০০ ((এএফআইএকি) এর সেটি নেই।
চেইনগুলি

2
প্রশ্ন, যখন কোনও স্ট্রিংয়ের অভ্যন্তরে রেফারেন্স করা হয় তখন এই সমাধানটি কী রেফারেন্সযুক্ত বস্তুগুলি সন্ধান করে ? লাইক,set @Query = “SELECT * FROM Object_I_Need_To_Find_References…”;
জেফ.ক্লার্ক

1
@ জেফ.ক্লার্ক - এটি খুঁজে পাওয়ার একটি সহজ উপায় রয়েছে :-) - তবে হ্যাঁ, এটি সরাসরি পদ্ধতির পাঠ্যটি সন্ধান করে, তাই এটি খুঁজে পেত।
চেইনগুলি

2
হ্যাঁ হ্যাঁ :) পরীক্ষাটি স্থাপন করতে আমার কিছুটা সময়
লাগছিল

27

নিম্নলিখিতটি এসকিউএল ২০০৮ এবং তারপরের উপর কাজ করে। উভয় সঞ্চিত পদ্ধতি এবং ফাংশনগুলির একটি তালিকা সরবরাহ করে।

select distinct [Table Name] = o.Name, [Found In] = sp.Name, sp.type_desc
  from sys.objects o inner join sys.sql_expression_dependencies  sd on o.object_id = sd.referenced_id
                inner join sys.objects sp on sd.referencing_id = sp.object_id
                    and sp.type in ('P', 'FN')
  where o.name = 'YourTableName'
  order by sp.Name

1
এসকিউএল-সার্ভার
চেইন

19

কখনও কখনও উপরের প্রশ্নগুলি সঠিক ফলাফল দেয় না, সারণী নির্ভরতা পেতে উপলভ্য পদ্ধতিতে তৈরি করা হয়:

EXEC sp_depends @objname = N'TableName';

1
আমার জন্য, এটি ট্রিগার এবং দর্শন দেখিয়েছে তবে সঞ্চয় করা নয়।
নিলওয়াল্টার্স

1
দ্রষ্টব্য: আমি এটি এমন একটি সিস্টেমে চালিয়েছি যেখানে আমার টেবিলগুলিতে অ্যাক্সেস ছিল তবে স্টোরড প্রক্স নয়, অবশ্যই স্টোরকড প্রোকস ফলাফলটিতে প্রদর্শিত হয়নি।
নিলওয়াল্টার্স

18

একটি অ-কোয়েরি উপায় হ'ল স্কেল সার্ভার ম্যানেজমেন্ট স্টুডিওটি ব্যবহার করা।

সারণিটি সন্ধান করুন, ডান ক্লিক করুন এবং "নির্ভরতা দেখুন" নির্বাচন করুন।

সম্পাদনা

তবে, মন্তব্যকারীরা যেমন বলেছিলেন, এটি খুব নির্ভরযোগ্য নয়।


4
2005 সালে নির্ভরতাগুলির তথ্য অবিশ্বাস্য যদি সঠিকভাবে ক্রমগুলি তৈরি না করা হয়।
মার্টিন স্মিথ

3
যেমন @ মার্টিন স্মিথ উল্লেখ করেছেন, একটি অস্তিত্বহীন অবজেক্টের উল্লেখ করে একটি সঞ্চিত পদ্ধতি তৈরি করা হবে, সতর্কতা থাকা সত্ত্বেও, প্রবেশকে সিস্টেপডাইন্ডে স্থাপন করা হবে না। এছাড়াও, বিদেশী ডাটাবেসে একটি সারণী উল্লেখ করে সঞ্চিত প্রক্রিয়াগুলির ক্ষেত্রে এটি একই সত্য: কোনও ডাটাবেসে সিড ডিপেন্ডেসে কোনও প্রবেশিকা রাখা হয় না। এন্টোহের বৈশিষ্ট্যটি হ'ল কোনও টেবিল বা ভিউটি বাদ / পুনরুক্তি নির্ভরতা শৃঙ্খলা ভঙ্গ করে। এই ... ত্রুটিযুক্ত ... বৈশিষ্ট্যগুলি এসকিউএল সার্ভারের নির্ভরতা ট্র্যাকিংকে বেশ বেশি অকেজো করে তোলে।
নিকোলাস কেরি

7

নিম্নলিখিত কোয়েরিতে সমস্ত সঞ্চিত কার্যপ্রণালী নাম এবং সেই এসপির সম্পর্কিত সংজ্ঞা পাওয়া যাবে will

select 
   so.name, 
   text 
from 
   sysobjects so, 
   syscomments sc 
where 
   so.id = sc.id 
   and UPPER(text) like '%<TABLE NAME>%'

5
SELECT
    o.name
FROM
    sys.sql_modules sm
INNER JOIN sys.objects o ON
    o.object_id = sm.object_id
WHERE
    sm.definition LIKE '%<table name>%'

কেবল মনে রাখবেন যে এটি এসপিগুলিকেও পরিণত করবে যেখানে টেবিলের নাম মন্তব্যে রয়েছে বা যেখানে টেবিলের নামটি ব্যবহার করা হচ্ছে এমন অন্য টেবিলের নামের একটি স্ট্রিং। উদাহরণস্বরূপ, যদি আপনার "টেস্ট" এবং "টেস্ট_2" নামক টেবিল থাকে এবং আপনি "পরীক্ষা" দিয়ে এসপি অনুসন্ধানের চেষ্টা করেন তবে আপনি উভয়ের ফলাফল পাবেন।


2
syscommentsদীর্ঘ পদ্ধতিগুলির জন্য এই পদ্ধতিতে জিজ্ঞাসা করা নির্ভরযোগ্য নয় কারণ এটি সংজ্ঞাটি একাধিক সারি জুড়ে 4000 অক্ষরের অংশে বিভক্ত করে। sys.sql_modulesএটি এড়ানো।
মার্টিন স্মিথ

1
ভাল যুক্তি. sys.sql_modulesপরিবর্তে এটি ব্যবহার করার জন্য আমি আপডেট করেছি ।
টম এইচ

3
syscomments আমার ডজন প্রতি এক অথবা যাতে একই প্রশ্নের উত্তর debunked হয়েছে stackoverflow.com/...
gbn

5

নীচের কোয়েরিটি কেবলমাত্র কোনও টেবিলের উপর নির্ভরশীলতার জন্য অনুসন্ধান করার সময় কাজ করে এবং কলামে নেই:

EXEC sp_depends @objname = N'TableName';

তবে, আপনি যদি সমস্ত প্রকার নির্ভরতা সন্ধান করতে চান তবে নীচের ক্যোয়ারীটি সেরা বিকল্প। এটি আসলে প্রয়োজনের চেয়ে বেশি তথ্য দেয়।

 select distinct
        so.name
        --, text 
  from 
       sysobjects so, 
       syscomments sc 
  where 
     so.id = sc.id 
     and lower(text) like '%organizationtypeid%'
  order by so.name

1
আমার জন্য, এসকিউএল সার্ভার 12.0-এ ডাটাবেসের বিরুদ্ধে চলমান
এসএসএমএস

3
SELECT DISTINCT OBJECT_NAME(OBJECT_ID),
object_definition(OBJECT_ID)
FROM sys.Procedures
WHERE object_definition(OBJECT_ID) LIKE '%' + 'table_name' + '%'

GO

আপনার যদি সারণির নাম উল্লেখ করতে হয় তবে এটি কাজ করবে।


3

ম্যানেজমেন্ট স্টুডিওতে আপনি ঠিক টেবিলের উপর ক্লিক করতে পারেন এবং 'নির্ভরতা দেখুন' এ ক্লিক করতে পারেন এখানে চিত্র বর্ণনা লিখুন

আপনি আপনার টেবিলের সাথে নির্ভরশীলতার সাথে অবজেক্টগুলির একটি তালিকা দেখতে পাচ্ছেন:এখানে চিত্র বর্ণনা লিখুন


1

আপনার কাছে মূলত 2 টি বিকল্প রয়েছে:

----বিকল্প 1

SELECT DISTINCT so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '%tablename%'

---- বিকল্প 2

SELECT DISTINCT o.name, o.xtype
FROM syscomments c
INNER JOIN sysobjects o ON c.id=o.id
WHERE c.TEXT LIKE '%tablename%'

এই 2 টি কোয়েরিতে আপনি সমস্ত সঞ্চিত প্রক্রিয়া পাবেন যা আপনার সারণীটি উল্লেখ করছে। এই কোয়েরিটি 2 টি সিস টেবিলের উপর নির্ভর করে যা সিসোবজেক্টস এবং সিসকমেন্টস। সিসোবজেক্টস যেখানে আপনার সমস্ত ডিবি অবজেক্টের নাম সংরক্ষণ করা থাকে তাতে এতে সঞ্চিত পদ্ধতি অন্তর্ভুক্ত থাকে।

সিস্টেমে আপনার সমস্ত পদ্ধতির পাঠ্য রয়েছে।

যদি আপনি জিজ্ঞাসা করেন: সিসকমেন্টস থেকে * নির্বাচন করুন

আপনার আইডি সমেত একটি টেবিল থাকবে যা শেষ কলাম হিসাবে সঞ্চিত পদ্ধতিতে থাকা পাঠ্যের সাথে সিসোবজেক্টস টেবিলে ম্যাপিং।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.