এসকিউএল সার্ভারটি 'অবৈধ কলামের নাম' প্রতিবেদন করেছে, তবে কলামটি উপস্থিত রয়েছে এবং ক্যোয়ারী পরিচালনা স্টুডিওর মাধ্যমে কাজ করে


107

আমি অচলাবস্থার কিছুটা আঘাত করেছি। আমার কাছে একটি কোয়েরি রয়েছে যা কিছু C#কোড দ্বারা উত্পন্ন । Microsoft SQL Server Management Studioএকই ডাটাবেসের বিরুদ্ধে চালানো হলে ক্যোয়ারি ঠিকঠাক কাজ করে।

তবে যখন আমার কোডটি একই ক্যোয়ারি চালানোর চেষ্টা করে আমি একটি অবৈধ কলাম সম্পর্কে একই ত্রুটি পাই এবং একটি ব্যতিক্রম ছুঁড়ে দেওয়া হয়। এই কলামটি উল্লেখ করে এমন সমস্ত প্রশ্ন ব্যর্থ হচ্ছে।

প্রশ্নে থাকা কলামটি সম্প্রতি ডাটাবেসে যুক্ত হয়েছিল। এটি ডেট কলাম বলা হয় Incident_Begin_Time_ts

ব্যর্থ একটি উদাহরণ হ'ল:

select * from PerfDiag 
where Incident_Begin_Time_ts > '2010-01-01 00:00:00';

Select MAX(Incident_Being_Time_ts);কোডে চালানোর সময় অন্যান্য প্রশ্নের মতোও ব্যর্থ হয় কারণ এটি মনে করে যে কলামটি অনুপস্থিত।

কোন ধারনা?


এটা কি ক্ষেত্রে সমস্যা হতে পারে? সম্ভবত ম্যানেজমেন্ট স্টুডিও কেস সম্পর্কে যত্নশীল নয়, অন্যদিকে ডাটাবেস অ্যাক্সেস করার অন্যান্য উপায়গুলি আরও কঠোর।
অলিভার

1
আপনি কি নিশ্চিত যে আপনি নিজের কোডে ম্যানেজমেন্ট স্টুডিওর মতো একই ডাটাবেস নিয়ে কাজ করছেন?
rlb.usa

3
আপনি কি নিশ্চিত যে আপনি সি # তে তৈরি করেছেন কলামের নাম এবং আপনি যে কলামের নামটি অনুসন্ধান করার চেষ্টা করছেন তা হুবহু এক? আপনার প্রশ্নের জন্য, আপনাকে দু 'বার লেখার' ঘটনা: _ শুরু করুন : _ Time_ts 'এবং একবার' ঘটনা: _ হচ্ছে : _ Time_ts '।
ক্রিশ্চিয়ান স্পেচট

1
@ অলিভার: কেস-সংবেদনশীলতা প্রতি সংযোগ নয়। এটি একটি ডাটাবেস / স্কয়ার সার্ভার অপশন হিসাবে।
নিকোলাস কেরি

উত্তর:


65

আমি সন্দেহ করি আপনার একই নামের দুটি টেবিল রয়েছে। একটির স্কিমা 'ডিবিও' ( dbo.PerfDiag) এর মালিকানাধীন এবং অন্যটির অ্যাকাউন্ট এসকিউএল সার্ভারের সাথে সংযুক্ত করতে ব্যবহৃত অ্যাকাউন্টের ডিফল্ট স্কিমার মালিকানাধীন (এর মতো কিছু userid.PerfDiag)।

যখন আপনার কাছে কোনও স্কিমা অবজেক্টের (যেমন একটি টেবিল) একটি অযোগ্য রেফারেন্স রয়েছে - যিনি স্কিমা নাম দ্বারা যোগ্য নয় - অবজেক্টের রেফারেন্সটি সমাধান করতে হবে। নির্দিষ্ট নাম (টেবিল) এর সাথে নির্দিষ্ট নামের কোনও অবজেক্টের জন্য নিম্নলিখিত ক্রমটি অনুসন্ধান করে নাম রেজোলিউশন ঘটে occurs নামটি প্রথম ম্যাচের সমাধান করে:

  • ব্যবহারকারীর ডিফল্ট স্কিমা অধীনে।
  • স্কিমার অধীনে 'ডিবিও'।

অযোগ্য রেফারেন্স উপরের অনুক্রমের প্রথম ম্যাচে আবদ্ধ।

সাধারণ প্রস্তাবিত অনুশীলন হিসাবে , কার্য সম্পাদনের কারণে, স্কিমা অবজেক্টগুলির জন্য সর্বদা রেফারেন্স যোগ্য হওয়া উচিত :

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

  • নাম রেজোলিউশন ক্যোয়ারী এক্সিকিউশনকে ধীর করে দেয় কারণ বস্তুর সম্ভাব্য সংস্করণটি (যা 'ডিবিও'র মালিকানাধীন) এর সমাধানের জন্য দুটি তদন্ত করতে হবে। এটি স্বাভাবিক ঘটনা। একমাত্র অনুসন্ধানের সময়টি কেবলমাত্র নামটির সমাধান করবে যদি বর্তমান ব্যবহারকারীর নির্দিষ্ট নাম এবং প্রকারের কোনও বস্তুর মালিক হয়।

[আরও দ্রষ্টব্য সম্পাদিত]

অন্যান্য সম্ভাবনাগুলি (কোনও নির্দিষ্ট ক্রমে নয়):

  • আপনি যে ডাটাবেসটি মনে করেন আপনি তার সাথে সংযুক্ত নন।
  • আপনি যে এসকিউএল সার্ভারের উদাহরণ হিসাবে নিজেকে মনে করেন আপনি তার সাথে সংযুক্ত নন।

আপনার সংযুক্ত স্ট্রিংগুলি দুবার পরীক্ষা করে দেখুন এবং নিশ্চিত করুন যে তারা স্পষ্টভাবে এসকিউএল সার্ভারের উদাহরণের নাম এবং ডাটাবেসের নাম নির্দিষ্ট করে।


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

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

ক্যাশে পুনরায় লোড করতে প্রথমে Ctrl + Shift + R দিয়ে চেষ্টা করুন। সবচেয়ে খারাপ ক্ষেত্রে আপনি কেবল কয়েক সেকেন্ড নষ্ট করেন।
রেডবিএক্স

267

শুধু প্রেস Ctrl+ + Shift+ + Rকর এবং দেখ ...

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে, Ctrl + Shift + R স্থানীয় ক্যাশে রিফ্রেশ করে।


আপনি কেন মনে করেন যে এটি করা সহায়ক হবে?
মাতাল

7
এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে, সিটিআরএল + শিফট + আর ইন্টেলিসেন্স ক্যাশে রিফ্রেশ করে। এটি ম্যানেজমেন্ট স্টুডিওর অভিযোগ করা থেকে বিরত করেছিল যে আমি যে কলামগুলি যুক্ত করেছি তা অবৈধ, তবে আমি মনে করি যে এটি একটি লাল-হেরিং ছিল (কোড থেকে এই নতুন কলামগুলিতে অ্যাক্সেস করার সময় মূল পোস্টারের মতো আমার এখনও সমস্যা আছে)।
গাইলস

2
প্রতিবার আমি অ্যাড-মাইগ্রেশন, তারপরে ডেটাবেস আপডেট করুন বলে মনে হচ্ছে, আমাকে এটি করতে হবে। অন্যথায় আমি পেয়েছি এটি এমএস এসকিউএল সার্ভারে এটি একটি অবৈধ কলামের নাম। কাজ করে! অনেক ধন্যবাদ।
BriOnH

1
দেখে মনে হচ্ছে আপনি প্রতিবার কোনও টেবিল বা এই ধরণের কিছু তৈরি করার সময় আপনাকে এটি করতে হতে পারে।
সনি চাইল্ডস

1
যখন অদ্ভুত জিনিসগুলি ঘটে তখন এগুলি সাধারণত আমার সমাধানের সমাধান হয় solution এই ক্ষেত্রে তবে এটি সমস্যার সমাধান করেনি। এসকিউএল স্টুডিও পুনরায় আরম্ভ করার চেষ্টাটি ততক্ষণে করেছে।
ড্যান মেহেলকভিস্ট

9

আপনি যদি কোনও লেনদেনের ভিতরে এটি চালিয়ে যাচ্ছেন এবং কোনও এসকিউএল বিবৃতি এই টেবিলের ড্রপ / পরিবর্তন করার আগে আপনি এই বার্তাটি পেতে পারেন।


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

3

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


2

আপনি যদি নিজের কলামের একই নামের সাথে ভেরিয়েবলগুলি ব্যবহার করছেন তবে এটি হতে পারে আপনি '@' ভেরিয়েবল চিহ্নিতকারীকে ভুলে গেছেন। একটি INSERT বিবৃতিতে এটি একটি কলাম হিসাবে সনাক্ত করা হবে।


2

ঠিক ঠিক একই সমস্যা ছিল। আমি অস্থায়ী টেবিলের কিছু এলিয়াস কলামের নাম পরিবর্তন করেছি যা একই কোডের অন্য একটি অংশ দ্বারা ব্যবহৃত হয়। কোনও কারণে, এটি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর দ্বারা ধরা পড়েনি এবং এটি অবৈধ কলামের নামগুলির বিষয়ে অভিযোগ করেছে।

আমি যা করলাম তা হল একটি নতুন ক্যোয়ারী তৈরি করা, পুরানো ক্যোয়ারী থেকে এসকিউএল কোডটি এই নতুন ক্যোয়ারীতে পেস্ট করুন এবং এটি আবার চালান। এটি পরিবেশকে সঠিকভাবে সতেজ করে বলে মনে হয়েছিল।


1

আমার ক্ষেত্রে আমি মাইক্রোসফ্ট এসকিউএল সেভার ম্যানেজমেন্ট স্টুডিও পুনরায় চালু করি এবং এটি আমার পক্ষে ভাল কাজ করে।


0

আমার ক্ষেত্রে আমি একাধিক এসকিউএল বিবৃতি জিজ্ঞাসা করার সময় ভুল রেজাল্টসেটের থেকে মানটি পাওয়ার চেষ্টা করছিলাম।


0

আমার ক্ষেত্রে মনে হচ্ছে সমস্যাটি একটি অদ্ভুত ক্যাশে সমস্যা ছিল। উপরের সমাধানগুলি কাজ করে না।

যদি আপনার কোডটি ঠিকঠাক কাজ করছিল এবং আপনি আপনার টেবিলে একটিতে একটি কলাম যুক্ত করেছেন এবং এটি 'অবৈধ কলামের নাম' ত্রুটি দেয় এবং উপরের সমাধানগুলি কাজ করে না, এটি চেষ্টা করুন: প্রথমে সংশোধিত তৈরির জন্য কেবল কোড বিভাগটি চালান টেবিল এবং তারপরে পুরো কোডটি চালান।


0

এই উত্তরটি অন্তর্ভুক্ত করা হয়েছে কারণ এটি Google এ "অবৈধ কলাম নাম sql" এর শীর্ষ ফলাফল এবং আমি এই উত্তরটি এখানে দেখতে পাইনি। আমার ক্ষেত্রে, আমি অবৈধ কলামের নাম, আইডি 1 পেয়ে যাচ্ছিলাম কারণ আমি আমার সত্তা ফ্রেমওয়ার্ক সি # কোডে .HasForeignKey বিবৃতিতে ভুল আইডি ব্যবহার করেছি। একবার আমি এটি পরিবর্তন করে .হসন () অবজেক্টের আইডি মিলিয়ে ত্রুটিটি চলে গেল।


0

টেবিলের মানটি ব্যবহার করে স্কেলার ফাংশনটি চালানোর সময় আমি এই ত্রুটিটি পেয়েছি, তবে আমার স্কেলার ফাংশন রিটার্ন ক্লজে সিলেক্ট স্টেটমেন্টটি "FROM টেবিল" অংশটি অনুপস্থিত ছিল। : Facepalms:


0

এছাড়াও আপনি যখন কানেকশনস্ট্রিং পরিবর্তন করতে ভুলে যান এবং এমন কোনও টেবিলের কথা জিজ্ঞাসা করেন যা আপনি স্থানীয়ভাবে যে পরিবর্তনগুলি করছেন সে সম্পর্কে কোনও ধারণা নেই।

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