এসকিউএল সার্ভারের টেবিলের নামটি ব্যবহারকারীর ডাটাবেজে # দিয়ে শুরু হয়, টেম্পডিবিতে নয়, একটি টেম্প টেবিল নয়


13

একরকম, দশক আগে, আমাদের ডাটাবেসে একটি টেবিল তৈরি হয়েছিল যা এর সাথে শুরু হয় #। এটা তোলে নেই অ্যাপ্লিকেশনের ডাটাবেসের অধীনে অবজেক্ট Explorer এ প্রদর্শিত হয়, tempdb। কিছু কারণে, আজুর এই জাতীয় ডেটাবেস আমদানি করবে না।

আমরা এটিকে ফেলে দিতে পারি না, এর নাম পরিবর্তন করতে পারি না বা এর সাথে ইন্টারঅ্যাক্ট করতে পারি না। আমি অবজেক্ট এক্সপ্লোরার থেকে মুছে ফেলার চেষ্টা করেছি , স্ক্রিপ্ট ড্রপ , জিইউআই থেকে পুনঃনামকরণ করেছি এবং তাদের কোনওটিই কাজ করেনি।

আমরা এসকিউএল 2008 আর 2 এ আছি।

drop table [*app*].[dbo]."#OBSOLETE";

Database name '*app*' ignored, referencing object in tempdb.
Msg 3701, Level 11, State 5, Line 1
Cannot drop the table '#OBSOLETE', because it does not exist or you do not 
have permission.

exec sp_rename "dbo.#OBSOLETE", "dbo.obsolete"

Msg 15225, Level 11, State 1, Procedure sp_rename, Line 338
No item by the name of 'dbo.#OBSOLETE' could be found in the current database '*app*', given that @itemtype was input as '(null)'.

আমরা কীভাবে এই বস্তুকে মেরে ফেলব যাতে আমরা এটিকে অ্যাজুরেতে স্থানান্তর করতে পারি?


4
টেবিলের নামটির চারপাশে বন্ধনী লাগানোর চেষ্টা করুন, একই প্রতিক্রিয়া?
rvsc48

1
@ Rvsc48- এর সমাধান এটি না করলে আপনি কি QUOTENAME ফাংশনটি ব্যবহার করে দেখতে পারেন (যদিও আমি মনে করি এটি হবে)। ডকস.মাইক্রোসফট.ইন- ইউএস
এসকিএল/

1
বন্ধনী: একই প্রতিক্রিয়া।
যে লোকটি

1
দয়া করে ডিবি নিম্নলিখিত প্রশ্নের সাথে এই টেবিল ধারণকারী চালান এবং প্রশ্ন আউটপুট আটকান: SELECT [name], CONVERT(VARBINARY(128), [name]) FROM sys.tables WHERE [name] = N'#OBSOLETE';। ধন্যবাদ।
সলোমন রুটজকি

2
আরেকটি বিকল্প (যা আমার কাছে পরীক্ষার সময় নেই): 1)object_id সেই টেবিলটি পান । 2) একক-ব্যবহারকারী মোডে উদাহরণটি পুনরায় চালু করুন। 3) ডেডিকেটেড অ্যাডমিন সংযোগের মাধ্যমে সংযোগ করুন। ৪) সেই ডিবিতে কিছু চেষ্টা করুন UPDATE sys.objects$ SET [name] =N'obsolete' WHERE [object_id] = {ye_olde_object_id}; {enter} GO {enter}। একটি শট মূল্যবান ..
সলোমন রুটজকি

উত্তর:


16

প্রদত্ত:

  1. sp_rename অবজেক্ট আইডির পরিবর্তে অবজেক্টের নাম ব্যবহার করে,
  2. আমরা অবজেক্টের নামটি ব্যবহার করতে পারি না কারণ এটি একটি দিয়ে শুরু হয় #এবং এটির বিশেষ অর্থ রয়েছে বলে ব্যাখ্যা করা হয় এবং আলাদাভাবে পরিচালিত হয়,
  3. অন্যান্য সমস্ত বিকল্প নিঃশেষ হয়ে গেছে

আপনার ডেডিকেটেড অ্যাডমিন কনসোল (ডিএসি) সংযোগের মাধ্যমে অন্তর্নিহিত সিস্টেম ক্যাটালগ টেবিলটি সম্পাদনা করার চেষ্টা করা উচিত :

  1. object_idযে টেবিলটি পান ।
  2. একক-ব্যবহারকারী মোডে উদাহরণটি পুনরায় চালু করুন। এটি সরাসরি সিস্টেম টেবিলগুলি আপডেট করতে সক্ষম হয় (অর্থাত্ ড্যাক সংযোগ ব্যবহারের জন্য প্রয়োজনীয়তা নয়)।
  3. ডেডিকেটেড অ্যাডমিন কনসোল সংযোগের মাধ্যমে সংযুক্ত করুন। আপনি কমান্ড প্রম্পট উইন্ডোতে নিম্নলিখিতটি চালিয়ে একটি এসকিউএলসিএমডি ইন্টারেক্টিভ সেশনে এটি করতে পারেন:

    C:\> SQLCMD -A -E

    বা, ডিবিতে সরাসরি এটি ব্যবহার করে:

    C:\> SQLCMD -A -E -d {database_name}
  4. সেই ডিবিতে নীচের মতো কিছু চেষ্টা করুন:

    UPDATE sys.objects$ {enter}
    SET [name] = N'obsolete' {enter}
    WHERE [object_id] = {ye_olde_object_id}; {enter}
    GO {enter}

    আপনি বিবৃতি না দেওয়া পর্যন্ত এটি বিবৃতি কার্যকর করে না GO {enter}

সিস্টেম ক্যাটালগ টেবিলগুলি সম্পাদনা করার সময় দয়া করে সতর্ক হন এবং এটি করার ধারণার সাথে খুব বেশি স্বাচ্ছন্দ্য বোধ করবেন না। এটি এমন কিছু যা কেবল তখনই করা উচিত যখন কোনও সমস্যা সমাধানের সম্পূর্ণ উপায় নেই (যেমন এখানে মামলা হিসাবে) case সরাসরি সম্পাদনাগুলি এড়াতে বেশ কয়েকটি কারণ থাকতে পারে তবে প্রাথমিকভাবে যে দুটি মনে আসে তা হ'ল:

  • অনেকটা আমরা যে ডেটা-মডেলগুলি তৈরি করি তার মতোই, জিনিসগুলি কীভাবে কাজ করে যা সম্পর্কে আমরা অজানা (যেমন ডেনারমালাইজেশন, "ব্যবসায়" বিধি বিভিন্ন টেবিল জুড়ে ডেটার রাজ্য পরিচালনা করে এমন কিছু নিয়ম এবং কার্যপ্রবাহ রয়েছে))
  • খুব সম্ভবত সরাসরি সম্পাদনা করা মাইক্রোসফ্টের আপনাকে সহায়তা করার দায়বদ্ধতা ভঙ্গ করে যদি আপনি সমস্যার মুখোমুখি হয়ে থাকেন এবং সমর্থন চুক্তি (সমর্থন চুক্তির শর্তাদি আমি দেখিনি), তবে আমার বিশ্বাস করতে খুব কষ্ট হয় যে এই জাতীয় ভাষা থাকবে না সেখানে)

    @ পল রান্ডাল আমার সম্পর্কিত একটি উত্তরে একটি মন্তব্যে নিশ্চিত করেছেন : "ম্যানুয়ালি একটি সিস্টেম টেবিল সম্পাদনা অবিচ্ছিন্নভাবে ডাটাবেসের বুট পৃষ্ঠায় একটি পতাকা সেট করে যা আপনার ডাটাবেসটিকে এইভাবে সম্পাদনা করে চিহ্নিত করেছে এবং সিএসএস সাহায্য না দেওয়ার সিদ্ধান্ত নিতে পারে আপনি যদি পরবর্তীকালে সেই ডেটাবেসটিতে সমস্যা হন।


4
আমি উত্তরটি পছন্দ করি তবে এটি কেন এত বিপজ্জনক তা সম্ভবত একটি বাক্য যুক্ত করা ভাল?
জো ওবিশ

@ জোওব্বিশ ধন্যবাদ, এবং ভাল পরামর্শ। আমি আগামীকাল কিছু যুক্ত করার চেষ্টা করব।
সলোমন রুটজকি

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