এসকিউএল সার্ভারকে কোনও সিস্টেম পদ্ধতিতে পাস করা স্ট্রিংয়ের জন্য কোনও অবজেক্টের নাম বাণিজ্য করার অনুমতি দেয়


13

কোনও সিস্টেমের সঞ্চিত পদ্ধতিতে কোনও অবজেক্টের নাম দেওয়া আইনত হওয়ার কারণ কী sp_helptext?

কোন পদ্ধতিটি অবজেক্টের নামটিকে স্ট্রিংয়ে রূপান্তর করে?

যেমন

-- works
sp_helptext myproc
sp_helptext [myproc]
sp_helptext [dbo.myproc]
-- and behaves the same as a string
sp_helptext 'myproc'
sp_helptext 'dbo.myproc'

-- does not work
sp_helptext dbo.myproc -- Msg 102, Level 15, State 1, Line 1 incorrect syntax near '.'
-- an additional case that does not work.
sp_helptext [dbo].[myproc] -- Msg 102, Level 15, State 1, Line 1 incorrect syntax

এটা তোলে বিজোড় মনে হচ্ছে যে আমি নই প্রয়োজনীয় , একক উদ্ধৃতি বৈধ proc নামের যদি না তা টি .পৃথক স্কিমা নাম এবং কার্যপ্রণালী নাম। আমি প্যারামিটারের মান হিসাবে পাস করার জন্য এটি কীভাবে একটি উদ্ধৃত নাম থেকে স্ট্রিং আক্ষরিক রূপে স্বয়ংক্রিয়ভাবে রূপান্তরিত হয় তার একটি ব্যাখ্যা খুঁজছি।

সমাধানের জন্য আমার কাছে নির্দিষ্ট সমস্যা নেই; নথিভুক্ত নয় এমন বিষয়গুলিতে আমি কেবল অনুসন্ধানী।


মন্তব্যে অবদানগুলি এই চ্যাট ঘরে সরানো হয়েছে ।
পল হোয়াইট 9

উত্তর:


10

সিস্টেম সঞ্চিত পদ্ধতির প্রথম যুক্তি sp_helptextহ'ল:

[@objname= ] 'name'
কোনও ব্যবহারকারী-সংজ্ঞায়িত, স্কিমা-স্কোপযুক্ত বস্তুর যোগ্য বা অযোগ্য নাম। কোয়েটেশন চিহ্নগুলি কেবলমাত্র কোনও যোগ্য বস্তু নির্দিষ্ট করা থাকলে প্রয়োজনীয়। যদি একটি ডাটাবেসের নাম সহ একটি সম্পূর্ণ যোগ্যতাসম্পন্ন নাম সরবরাহ করা হয় তবে ডাটাবেসের নাম অবশ্যই বর্তমান ডাটাবেসের নাম হতে হবে। অবজেক্টটি অবশ্যই বর্তমান ডাটাবেসে থাকতে হবে। নামটি nvarchar(776)কোনও ডিফল্ট নয়।

তদতিরিক্ত, ডিলিমেটেড আইডেন্টিফায়ার্স (ডাটাবেস ইঞ্জিন) এর জন্য ডকুমেন্টেশনতে বলা হয়েছে:

এসকিউএল সার্ভারে প্যারামিটার হিসাবে সনাক্তকারী ব্যবহার করা
অনেকগুলি সিস্টেম সঞ্চিত পদ্ধতি, ফাংশন এবং ডিবিসিসি বিবৃতি পরামিতি হিসাবে বস্তুর নাম নেয়। এই প্যারামিটারগুলির মধ্যে কয়েকটি মাল্টিপার্ট অবজেক্টের নাম গ্রহণ করে, অন্যরা কেবলমাত্র একক-অংশের নাম স্বীকার করে। একটি একক-অংশ বা মাল্টিপার্ট নাম প্রত্যাশিত কিনা তা নির্ধারণ করে যে কীভাবে কোনও প্যারামিটারটি এসকিউএল সার্ভার দ্বারা অভ্যন্তরীণভাবে পার্স করা হয় এবং ব্যবহৃত হয়।

একক অংশের প্যারামিটারের নামগুলি
যদি প্যারামিটারটি একক-অংশ সনাক্তকারী হয় তবে নামটি নিম্নলিখিত উপায়ে নির্দিষ্ট করা যেতে পারে:

  • উদ্ধৃতি চিহ্ন বা সীমানা ছাড়াই
  • একক উদ্ধৃতি চিহ্নগুলিতে সংযুক্ত
  • দ্বিগুণ উদ্ধৃতি চিহ্নগুলিতে সংযুক্ত
  • বন্ধনী বন্ধ

মাল্টিপার্ট প্যারামিটারের নামগুলি
মাল্টিপার্ট নামগুলি যোগ্য নাম যা ডেটাবেস বা স্কিমা নাম এবং অবজেক্টের নাম অন্তর্ভুক্ত করে। যখন একটি মাল্টিপার্ট নামটি প্যারামিটার হিসাবে ব্যবহৃত হয়, এসকিউএল সার্ভারের প্রয়োজন সম্পূর্ণ স্ট্রিং যা মাল্টিপার্ট নামটি তৈরি করে একক উদ্ধৃতি চিহ্নের একটি সেটে আবদ্ধ থাকে।


sp_helptextএকক-অংশ (অযোগ্য) এবং বহুগুণ (যোগ্য) উভয় বস্তুর নাম গ্রহণ করার জন্য প্রথম যুক্তি ।

যদি টি-এসকিউএল পার্সার আইটেমটিকে sp_helptextএকটি একক-অংশের নাম হিসাবে চিহ্নিত করে (উপরের চারটি বুলেট পয়েন্ট অনুসারে), ফলস্বরূপ নামটি পদ্ধতি দ্বারা প্রত্যাশিত (স্ট্রিং টাইপ) আর্গুমেন্ট মান হিসাবে পাস করা হয়।

পার্সার যখন এটিকে একটি গুণমানের নাম হিসাবে দেখেন , তখন পাঠ্যটি বর্ণিত হিসাবে একক উদ্ধৃতি চিহ্ন দিয়ে ঘিরে রাখা আবশ্যক।

একাধিক নামের মূল বৈশিষ্ট্যটি হল একটি .বিভাজক (যে কোনও সীমানার বাইরে)।

প্রশ্ন থেকে এই উদাহরণগুলি সফলভাবে একক অংশের নাম হিসাবে ব্যাখ্যা করা হয়:

মাইপ্রোক - একক অংশ (উদ্ধৃতি চিহ্ন বা সীমানা ছাড়াই - বুলেট # 1)
[মাইপ্রোক] - একক অংশ (বন্ধনীগুলিতে - বুলেট # 4)
'মাইপ্রোক' - একক অংশ (একক উদ্ধৃতি চিহ্নগুলিতে - বুলেট # 2)
'dbo.myproc' - একাধিক প্রয়োজনীয় একক উদ্ধৃতি চিহ্নের সঙ্গে
[dbo.myproc] - একক অংশ (বন্ধনী মধ্যে - বুলেট # 4)

প্রশ্ন থেকে শেষ দুটি উদাহরণ উভয়ই মাল্টিপার্ট প্যারামিটারের নাম (উন্মুক্ত .বিভাজকের কারণে ) হিসাবে পার্স করা হয়েছে । তারা একটি ত্রুটি তৈরি করে কারণ তাদের প্রয়োজনীয় একক উদ্ধৃতি চিহ্নের ঘাটতি রয়েছে:

dbo.myproc - প্রয়োজনীয় একক উদ্ধৃতি চিহ্ন ছাড়া গুণিত
[ডিবিও]। [মাইআরপোক] - প্রয়োজনীয় একক উদ্ধৃতি চিহ্ন ছাড়াই গুণফল

ডাবল উদ্ধৃতি চিহ্ন ব্যবহার করে এই অতিরিক্ত উদাহরণটি সফল:

"dbo.myproc" - একক অংশ (ডাবল উদ্ধৃতি চিহ্ন - বুলেট পয়েন্ট # 3)

মনে রাখবেন যে এটি কার্যকরভাবে একক-পার্ট নাম হিসাবে (পদ্ধতি প্যারামিটার মানের জন্য) ব্যাখ্যা করা হয়েছে , তবে পদ্ধতি কোডটি নমনীয়ভাবে (ব্যবহার PARSENAMEএবং ব্যবহার) স্ট্রিংটিকে (মাল্টিপার্ট) স্ট্রিংটি ব্যাখ্যা করতে সক্ষম হয় OBJECTID

চূড়ান্ত পয়েন্ট হিসাবে, এখানে ডাবল উদ্ধৃতি চিহ্ন ব্যবহার করে সেটিংসের উপর নির্ভর করে না তা নোট করুন QUOTED_IDENTIFIER

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