আমি একটি সঞ্চিত প্রক্রিয়া লিখছি যা একটি ডাটাবেস নামটিকে একটি আর্গুমেন্ট হিসাবে গ্রহণ করে এবং সেই ডাটাবেসের সূচীগুলির তালিকা এবং তাদের খণ্ডন স্তরকে একটি টেবিল প্রদান করে। এই সঞ্চিত পদ্ধতিটি আমাদের ডিবিএ ডাটাবেসে থাকবে (যে ডিবিতে টেবিলগুলি রয়েছে ডিবিএগুলিকে পর্যবেক্ষণ এবং অনুকূলকরণের জন্য ব্যবহার করে)। যদি কোনও পার্থক্য তৈরি হয় তবে প্রশ্নে থাকা সমস্ত সিস্টেমগুলি সমস্ত এসকিউএল সার্ভার 2008 আর 2 2
আমার কাছে প্রাথমিক জিজ্ঞাসাটি শেষ হয়ে গেছে, তবে সূচকের প্রকৃত নাম দেওয়ার চেষ্টা করতে গিয়ে আটকে আছি। আমার জ্ঞানের সর্বোপরি, সেই তথ্যটি প্রতিটি ব্যক্তির sys.indexes ভিউতে অন্তর্ভুক্ত থাকে। আমার সুনির্দিষ্ট সমস্যাটি অন্য ডেটাবেজের স্টোরেজ পদ্ধতি থেকে প্রোগ্রামটিমে ভিউটি রেফারেন্স দেওয়ার চেষ্টা করছে।
উদাহরণস্বরূপ, এটি ইস্যুতে ক্যোয়ারির অংশ:
FROM sys.dm_db_index_physical_stats(@db_id,NULL,NULL,NULL,NULL) p
INNER JOIN sys.indexes b ON p.[object_id] = b.[object_id]
AND p.index_id = b.index_id
AND b.index_id != 0
@Db_id দ্বারা চিহ্নিত ডাটাবেস থেকে কার্যকর করা হলে ক্যোয়ারীটি ঠিকঠাক কাজ করে, কারণ এটি সঠিক sys.indexes ভিউটি ব্যবহার করছে। আমি যদি ডিবিএ ডাটাবেস থেকে এটি কল করার চেষ্টা করি তবে, এটি সমস্তই বাতিল হয়ে যায়, কারণ সিএস.ইনডেক্সস ভিউটি ভুল ডাটাবেসের জন্য।
আরও সাধারণ পরিভাষায়, আমাকে এরকম কিছু করতে সক্ষম হতে হবে:
DECLARE @db_name NVARCHAR(255) = 'my_database';
SELECT * FROM @db_name + '.sys.indexes';
অথবা
USE @db_name;
আমি স্ট্রিং কনটেনটেশন এবং OBJECT_NAME / OBJECT_ID / DB_ID ফাংশনগুলির সংমিশ্রণ ব্যবহার করে ডেটাবেসগুলি স্যুইচ করার বা অন্যান্য ডেটাবেসগুলি রেফারেন্স করার চেষ্টা করেছি এবং কিছুই কাজ করছে বলে মনে হচ্ছে না। আমি সম্প্রদায়ের যে কোনও ধারণাগুলি থাকতে পারে তার প্রশংসা করব, তবে সন্দেহ করি যে প্রতিটি স্বতন্ত্র ডাটাবেসে থাকার জন্য আমাকে এই সঞ্চিত পদ্ধতিটি পুনরায় করতে হবে।
আপনার পরামর্শের জন্য ধন্যবাদ।