টেবিলের স্কিমা নির্দিষ্ট না করে জিজ্ঞাসা করুন


10

আমি এসকিউএল সার্ভার 2000 থেকে আমার ২০০ টি ডাটাবেসে একগুচ্ছ টেবিল আমদানি করেছি। সমস্ত আমদানি করা টেবিলগুলি আমার ব্যবহারকারীর নাম সহ: উপসর্গযুক্ত erpadmin.tablename

সারণী বৈশিষ্ট্যে এটি 'আরপ্যাডমিন' কে ডিবি স্কিমা হিসাবে তালিকাভুক্ত করে। আমি যখন কোন ক্যোয়ারী লিখি তখন আমাকে এখন 'এরপ্যাডমিন' অন্তর্ভুক্ত করতে হবে। সমস্ত টেবিলের নামগুলির সামনে যা বিভ্রান্তিকর।

বর্তমান ফলাফল:

select *
from erpadmin.tablename

কাঙ্ক্ষিত ফলাফল:

select *
from  tablename

উত্তর:


23

আপনি যদি এসকিউএল সার্ভার 2000 তে ছিলেন এমনভাবে ডিবিও স্কিমা ব্যবহার করে ফিরে যেতে চান, আপনি টেবিলটি ডিবিও স্কিমাতে ফিরে যেতে পারেন:

ALTER SCHEMA dbo TRANSFER erpadmin.tablename;

বিকল্প যদি আপনি নন-ডিবিও স্কিমাটি পছন্দ করেন তবে আপনার ব্যবহারকারীর ডিফল্ট স্কিমা সেট erpadminকরতে হবে যদি আপনি কোনও স্কিমা নির্দিষ্ট না করেন তবে এটি ডিফল্ট হিসাবে ব্যবহার করবে। (সিসাদমিন স্থির সার্ভার রোলের সদস্যগণ ডিফল্টরূপে DEFAULT_SCHEMAএবং ব্যবহারকে উপেক্ষা করুন ignore dbo)

ALTER USER erpadmin WITH DEFAULT_SCHEMA = erpadmin;

আপনার দুটি অংশের নাম (স্কিমা.ট্যাবলেট) যদিও প্রবেশ করা ভাল অভ্যাস, সুতরাং আপনি কোন টেবিলটির সাথে উল্লেখ করছেন তা স্পষ্ট করে বলতে পারেন। কিছু বৈশিষ্ট্যগুলির জন্য আপনাকে দ্বি-অংশের নাম ব্যবহার করা দরকার, সূচী দর্শনগুলি একটি উদাহরণ।


17

এটি ডাটাবেস অবজেক্টগুলিতে অ্যাক্সেস করার সময় কেন আপনার স্কিমা নাম নির্দিষ্ট করা উচিত তার একটি সর্বোত্তম ঘটনা । যখন এটি অনির্দিষ্ট করা হয়েছে এবং আপনি কোনও অ-ডিফল্ট স্কিমাতে কোনও বস্তু অ্যাক্সেস করার চেষ্টা করছেন তখন আপনি যে বিষয়টি এই মুহূর্তে দেখছেন তা চালিয়ে যাবেন।

আসল ফিক্সটি হ'ল আপনার অ্যাপ্লিকেশনটিকে (বা আপনার কাছে এখন যা কিছু রয়েছে এজেন্টের কারণ হিসাবে এজেন্ট রয়েছে) তা স্পষ্ট করে দেওয়া change

আমি যখন কোন ক্যোয়ারী লিখি তখন আমাকে এখন 'এরপ্যাডমিন' অন্তর্ভুক্ত করতে হবে। সমস্ত টেবিলের নামগুলির সামনে যা বিভ্রান্তিকর।

এটি বিভ্রান্তিকর নয়, এটি একটি স্পষ্ট নামকরণ কনভেনশন । আমি আপনাকে প্রস্তাব দিচ্ছি যে অবজেক্টের পরিবর্তন এবং অসঙ্গতি এড়াতে আপনি সেই নামটির সাথে লেগে থাকুন।


3
সর্বদা দ্বি-অংশ নাম ব্যবহারের আর একটি কারণ হ'ল একাধিক ব্যবহারকারী একই কোড কার্যকর করেন এমন পরিস্থিতি এড়ানো (উদাহরণস্বরূপ select ... from table5 ;) এবং বিভিন্ন ফলাফল পান। এটি প্ল্যান ক্যাচিংয়ের পক্ষে খারাপ এবং সমস্যা সমাধানের পক্ষেও খারাপ (কিউ সমর্থনকারী ব্যক্তি, "এই ক্যোয়ারীটি এখানে ভাল চলছে")। এছাড়াও, স্কাইমাবাইন্ডিং, যা ফাংশন এবং দর্শনগুলির সূচীকরণের জন্য প্রয়োজনীয়, তার দুটি অংশের নাম প্রয়োজন। টিএলডিআর: অলস হওয়া বন্ধ করুন - দুটি অংশের নাম ব্যবহার করুন।
গ্রিনস্টোন ওয়াকার

7

@ অ্যাডামওয়েঞ্জার উত্তর ছাড়াও। আনোথ স্কিমাতে স্থানান্তর করার জন্য স্ক্রিপ্ট তৈরি করতে আপনি নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করতে পারেন

select 'ALTER SCHEMA dbo TRANSFER '+s.name+'.'+t.name
from sys.schemas s
     join sys.tables t on t.schema_id=s.schema_id
where s.name='erpadmin'

4

আপনার সমস্যা সম্ভবত মাইগ্রেশন কীভাবে করা হয়েছিল তার কারণে। স্টাফ আপনার ব্যবহারকারীর সাথে সংযুক্ত করা উচিত নয়, যদি না আপনি মালিক হিসাবে বিবেচিত হন।

স্কিমাগুলি আপনাকে যেভাবে বোধগম্যতার দ্বারা সারণী আলাদা করতে সহায়তা করবে to ধরুন, এইচআর প্রস্থান করার জন্য আপনার কাছে এক টেবিল রয়েছে এবং উভয়কে একই ডেটাবেজে রাখার পরে উত্পাদন বিভাগের জন্য আলাদা একটি চান a সেক্ষেত্রে আপনার দুটি সংখ্যক টেবিল থাকতে পারে যার নাম সংস্থান আছে, একটি উত্পাদন স্কিমে এবং অন্যটি এইচআর স্কিমাতে। এজন্য shcemas অবশ্যই নির্দিষ্ট করা উচিত, যদি না আপনি ডিফল্ট স্কিমাতে স্টাফ আনেন।

যদি আপনি অন্য কোনও কারণে মাইগ্রেশনটি পুনরায় করেন না, তবে অ্যাডাম ওয়েঙ্গারের স্থানান্তরটি বুদ্ধিমান বিকল্প হওয়া উচিত।


-2

USE [tablename] আপনার জিজ্ঞাসার সাহায্যে আপনার কমান্ডটি শুরু করুন রেফারেন্সের সাথে সম্পর্কিত কোনও ডাটাবেস নেই এবং আপনি যে ডাটাবেসটি সন্ধান করছেন তাতে লগইন হওয়া ব্যবহারকারীর জন্য ডিফল্ট নয় ক্যোয়ারী উইন্ডোটির শীর্ষে এটি সম্ভবত "মাস্টার" বলেছে


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