পর্দার আড়ালে ঠিক কীভাবে sp_msforeachdb কাজ করে?


9

আমার যে সমস্যাটি হচ্ছে তাতে আমি সমস্যা সমাধান করতে হবে এবং আমার সমস্যাটি কাটিয়ে উঠতে sp_msforeachdb কীভাবে কাজ করে তা বুঝতে আমার কিছুটা সহায়তা দরকার।

যা হয় তা আমি যখনই sp_msforeachdb চালাই তখনই আমার ত্রুটি হয় Msg 102, Level 15, State 1, Incorrect syntax near '61'

আমার কোডের উদাহরণ নিম্নরূপ:

EXEC SP_msforeachdb 'SELECT ''?'' AS Database
                     FROM ?.sys.objects
                     WHERE name like ''%aetna%''

তবে, sp_msforeachdb এর প্যারামিটার হিসাবে আমার কী ক্যোয়ারী রয়েছে তা বিবেচ্য নয়। প্রতিবারই আমি একই ত্রুটি পাই। আমার কাছে এমন একটি ডাটাবেস আছে যা '61s1d' দিয়ে শুরু হয়, যাতে এটি আমার মনে করে যে এটির ডিবি নাম নিয়ে কোনও সমস্যা রয়েছে, তবে আমি স্পষ্টভাবে জানি না যে sp_msforeachdb এর নেপথ্যে কী চলছে।

বিষয়গুলি লক্ষণীয়।

  • এটি একমাত্র ডাটাবেস যা একটি সংখ্যা দিয়ে শুরু হয়
  • আমি "যদি ডেটাবেস '% 61%' এর মতো হয় তেমন কোড ব্যবহার করার চেষ্টা করতে পারি না ......" তবে এখনও একই ত্রুটি।
  • আমি ডাটাবেসের নাম পরিবর্তন করে পরীক্ষা করতে পারি না - এর সাথে সংযুক্ত অনেকগুলি জিনিস।
  • যদি আমি একটি পরীক্ষা ডিবি তৈরি করি যা '51' দিয়ে শুরু হয়, তবে আমি সেই ডাটাবেসের জন্য ত্রুটিও পেয়েছি

আমি কীভাবে এটি কাটিয়ে উঠতে পারি?

উত্তর:


16

সবার আগে sp_msforeachdb ব্যবহার করবেন না এটির বেশ কয়েকটি জ্ঞাত সমস্যা রয়েছে। আপনি এখানে এবং এখানে অ্যারোন বার্ট্র্যান্ডের সংস্করণ ব্যবহার করা থেকে ভাল ।

তবে এটি একটি কার্সার, গতিশীল এসকিউএল এবং একটি প্রতিস্থাপন ব্যবহার করে। আপনি আসলে sp_helptext ব্যবহার করে কোডটি দেখতে পারেন।

EXEC sp_helptext sp_msforeachdb

আপনি যদি এই কোডটি ব্যবহার করেন তবে এটি আপনার কিছু সমস্যার সমাধান করবে।

EXEC SP_msforeachdb 'SELECT ''?'' AS Database
                 FROM [?].sys.objects
                 WHERE name like ''%aetna%''

বন্ধনীগুলি আপনার উল্লেখ করা নির্দিষ্ট সমস্যাটি করবে। তবে আপনার যদি এতে [বা] কোনও ডাটাবেস থাকে তবে আপনি সমস্যাগুলিতে চলে যাবেন।


আকর্ষণীয়, "চারপাশে বন্ধনী ব্যবহার করে?" থেকে কাজ করেছেন। আমি অ্যারন বারট্র্যান্ডের সংস্করণটি দেখব। আপনি কি কার্সারের কারণে পারফরম্যান্সের উল্লেখযোগ্য অবক্ষয় লক্ষ্য করেছেন?
জেফ.ক্লার্ক

2
কার্সর কেবল তখনই আসল পারফরম্যান্স সমস্যা হয় যখন আপনার কাছে কয়েকটি সারি বেশি থাকে। আপনি ডাটাবেসের সর্বোচ্চ # এর কাছাকাছি না থাকলে আপনি কোনও সমস্যা দেখতে পাবেন না। সমস্যাটি হ'ল এটি ডাটাবেসগুলি এড়িয়ে যেতে পারে। হারুনের নিবন্ধটি পড়ুন এবং তিনি আরও বিশদে যান।
কেনেথ ফিশার

1
আমি এটি একাধিক অনুষ্ঠানে সম্পূর্ণরূপে ডিবি এড়িয়ে যেতে দেখেছি। হারুনের ব্যবহার করুন, এটি অনেক বেশি নির্ভরযোগ্য।
ক্রিস গ্রুটমিয়ার 18

11

@ কেনেথ বলেছিলেন এমন কিছু নিয়ে দ্বিমত পোষণ না করে, আমার উল্লেখ করা উচিত যে আপনি যে ত্রুটির মুখোমুখি হচ্ছেন তার কিছু করার নেই sp_MSForEachDB। এটি কীভাবে ডেটাবেসটির নামকরণ হয়েছিল তার কারণে: এটি একটি সংখ্যা দিয়ে শুরু হয়। নামকরণের জন্য নিয়মগুলি (কেবল ডেটাবেস নয়) ডাটাবেস শনাক্তকারীদের জন্য এমএসডিএন পৃষ্ঠায় বিস্তারিত রয়েছে । আপনি যদি "নিয়মিত শনাক্তকারীদের বিধিগুলি" অনুসরণ করেন তবে আপনার সেই নামগুলি বর্গাকার বন্ধনী বা ডাবল-কোটে আবদ্ধ করার দরকার নেই । কতগুলো নাম বৈ নয় যে যারা নিয়ম বাইরের থেকে এসেছে না ঘিরা করা (সবসময়) প্রয়োজন হবে।


1
এই তথ্যের জন্য আপনাকেও ধন্যবাদ - আমি এই সীমাবদ্ধতা সম্পর্কে অসচেতন ছিলাম। দুর্ভাগ্যক্রমে যে ডেটাবেসটি আমি সংস্থায় যোগদানের এক দশক আগে তৈরি হয়েছিল :)
জেফ.ক্লার্ক

@ জেফ.ক্লারাক আমি প্রস্তাব দিচ্ছিলাম না যে আপনি ডিবিটির নাম পরিবর্তন করে দিতে পারেন যে প্রশ্নে আপনি উল্লেখ করেছেন যে আপনি এটি পরিবর্তন করতে পারবেন না। আমি কেবল আপনার (এবং অন্যদের) প্রকৃত সমস্যাটি জানতে চেয়েছিলাম কারণ যে কোনও সময় আপনাকে সেই ডাটাবেসটির নাম নির্দিষ্ট করে দেওয়ার দরকার পরে আবার আসবে। এবং সম্পূর্ণ নিয়মগুলি পড়ার মাধ্যমে আপনাকে অন্যান্য জিনিসগুলি এড়াতে সহায়তা করতে পারে যার একটি নাম প্রয়োজন - ডেটাবেস, টেবিল, কলাম, সূচি, নিয়ন্ত্রণ, ইত্যাদি - সর্বদা বর্গাকার বন্ধনী বা ডাবল-কোটে আবদ্ধ থাকতে।
সলোমন রুটজকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.