subqueryআপনার কোড আপনি আছেন একটি বলা হয় উদ্ভূত টেবিল । এটি কোনও বেস টেবিল নয়, এমন একটি টেবিল যা ক্যোরি চালানোর সময় "বেঁচে থাকে"। ভালো লেগেছে মতামত (এটিও বলা হয় দেখা টেবিল ) - এবং সাম্প্রতিক সংস্করণে CTEs যা অন্য, 4 র্থ উপায় একটি ক্যোয়ারী ভিতরে একটি টেবিল "define" - তারা নানাভাবে একটি টেবিল একই রকম। আপনি করতে পারেন selectতাদের কাছ থেকে, আপনি তাদের ব্যবহার করতে পারেন fromবা joinতাদের অন্যান্য সারণীগুলিতে (বেস বা না!)।
কিছু ডিবিএমএসে, (সমস্ত ডিবিএমএস একইভাবে প্রয়োগ করে না) এই সারণী / দর্শনগুলি আপডেটযোগ্য । এবং "updatable" আমরা এটিও করতে পারেন তার মানে update, insertবা deleteতাদের কাছ থেকে।
যদিও সীমাবদ্ধতা রয়েছে এবং এটি প্রত্যাশিত। subquery2 (বা 17 টেবিল) এর যোগদান ছিল কিনা তা কল্পনা করুন । তার deleteমানে কি তখন? (কোন সারণী থেকে সারিগুলি সরিয়ে ফেলা উচিত?) আপডেটযোগ্য দর্শনগুলি একটি খুব জটিল বিষয় । রিলেশনাল তত্ত্বের সুপরিচিত বিশেষজ্ঞ, ক্রিস ডেটের লেখা এই বিষয়ে পুরোপুরি একটি সাম্প্রতিক (২০১২) বই রয়েছে: দেখুন আপডেটিং এবং রিলেশনাল থিয়োরি ।
যখন উত্পন্ন টেবিলটি (বা দেখুন) খুব সাধারণ ক্যোয়ারী হয়, যেমন এটির কেবল একটি বেস টেবিল থাকে (সম্ভবত এটি দ্বারা সীমাবদ্ধ WHERE) এবং না GROUP BY, তখন উত্পন্ন টেবিলের প্রতিটি সারি অন্তর্নিহিত বেস টেবিলের একটি সারিটির সাথে মিলে যায়, তাই এটি হয় এটি থেকে আপডেট, সন্নিবেশ বা মুছতে সহজ * ।
সাবকিউয়ের ভিতরে কোডটি আরও জটিল হলে, উত্পন্ন টেবিল / দৃশ্যের সারিগুলি অন্তর্নিহিত বেস টেবিলগুলির মধ্যে একটি থেকে সারিগুলিতে সনাক্ত করা / সমাধান করা যায় কিনা তার উপর নির্ভর করে।
SQL সার্ভার জন্য, আপনি দুটিই MSDN মধ্যে Updatable দেখেছে অনুচ্ছেদে আরও পড়তে পারেন: CREATE VIEW।
আপডেটযোগ্য দৃশ্যগুলি
নীচের শর্তগুলি যতক্ষণ সত্য হয় ততক্ষণ আপনি একটি ভিউয়ের মাধ্যমে অন্তর্নিহিত বেস টেবিলের ডেটা পরিবর্তন করতে পারেন:
সহ যেকোন পরিবর্তন, UPDATE, INSERT, এবং DELETEবিবৃতি, অবশ্যই রেফারেন্স কলাম শুধুমাত্র একটি বেস টেবিল থেকে।
ভিউতে সংশোধিত হওয়া কলামগুলি অবশ্যই টেবিল কলামগুলিতে অন্তর্নিহিত ডেটা সরাসরি উল্লেখ করতে হবে। কলামগুলি অন্য কোনও উপায়ে উত্পন্ন করা যায় না, যেমন নীচের মাধ্যমে:
একটি সমষ্টিগত ফাংশন: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR, এবং VARP।
একটি গণনা। অন্যান্য কলাম ব্যবহার করে এমন একটি এক্সপ্রেশন থেকে কলামটি গণনা করা যায় না। কলাম সেট অপারেটার ব্যবহার করে গঠিত হয় UNION, UNION ALL, CROSSJOIN, EXCEPT, এবং INTERSECT
একটি গণনার পরিমাণ এবং updatable নয়।
কলাম পরিবর্তিত হচ্ছে দ্বারা প্রভাবিত হয় না GROUP BY, HAVINGঅথবা DISTINCTক্লজ।
TOPWITH CHECK OPTIONদফার সাথে ভিউয়ের সিলেক্ট স্টেটমেন্টে কোথাও ব্যবহার করা হয় না ।
পূর্ববর্তী বিধিনিষেধগুলি FROMভিউয়ের দফায় যে কোনও সাবকিউয়েরিতে প্রযোজ্য , ঠিক যেমনটি তারা দৃশ্যে প্রয়োগ হয়। সাধারণত, ডেটাবেস ইঞ্জিনটি অবশ্যই দ্বি সংজ্ঞা থেকে একটি বেস টেবিলের মধ্যে পরিবর্তনগুলি স্পষ্ট করতে সক্ষম হতে হবে।
আসলে deleteসহজ, কম জটিল update। বেস টেবিলের কোন সারিগুলি মুছতে হবে তা সনাক্ত করার জন্য এসকিউএল সার্ভারের কেবল প্রাথমিক কী বা অন্য কোনও উপায় প্রয়োজন। কারণ update, একটি অতিরিক্ত (বরং স্পষ্ট) বিধিনিষেধ রয়েছে যা আমরা কোনও গণিত কলাম আপডেট করতে পারি না। একটি আপডেট করার জন্য আপনি আপনার ক্যোয়ারীটি সংশোধন করার চেষ্টা করতে পারেন। উইন্ডোজ আপডেট করা CreatedDateTimeসম্ভবত ঠিক কাজ করবে তবে গণিত RowNumberকলামটি আপডেট করার চেষ্টা করলে ত্রুটি বাড়বে। এবং insertআরও জটিল, কারণ আমাদের বেস টেবিলের সমস্ত কলামের মান DEFAULTবাধা দিতে হবে না যার সীমাবদ্ধতা নেই।