এসকিউএল সার্ভার ২০০৮-এ টেবিল ওরফে দিয়ে কীভাবে আপডেট আপডেট করবেন?


212

আমার খুব বেসিক আছে UPDATE SQL-

UPDATE HOLD_TABLE Q SET Q.TITLE = 'TEST' WHERE Q.ID = 101;

এই ক্যোয়ারীতে জরিমানা রান Oracle, Derby, MySQL- কিন্তু এটা SQL সার্ভার 2008 সালে ব্যর্থ নিম্নলিখিত ত্রুটির সঙ্গে

"এমএসজি 102, স্তর 15, রাজ্য 1, লাইন 1 'কিউ' এর নিকটে ভুল সিনট্যাক্স।"

যদি আমি এসকিউএল থেকে ওরফে, "কিউ" এর সমস্ত উপস্থিতি সরিয়ে ফেলি তবে এটি কার্যকর হয়।

তবে আমার উপনামটি ব্যবহার করা দরকার।


5
আপনার একটি উপনাম ব্যবহার করার দরকার নেই কেন? আপনার এটি প্রয়োজন বলে মনে হচ্ছে না।
মার্ক বাইয়ার্স

5
হ্যাঁ - প্রোগ্রামিং দৃষ্টিকোণ থেকে আমার এটির দরকার নেই। তবে আমার একটি বিদ্যমান / পুরাতন গ্রন্থাগার রয়েছে যা টেবিলের উপাধি সহ সমস্ত ধরণের ডিএমএল এসকিউএল উত্পন্ন করে। লাইব্রেরিতে এক ধরণের জটিল যুক্তি সহ অনেকগুলি ক্লাস রয়েছে। লাইব্রেরিতে এখন টেবিল-এলিয়াসগুলি থেকে মুক্তি পাওয়া এমএসএসকিউএল-এর জন্য কাজ করার জন্য বিদ্যমান যুক্তিটিকে টুইঙ্ক করার চেয়ে বেশি কাজ। এছাড়াও যখন একাধিক টেবিল জড়িত থাকে, তখন আমার টেবিল-ওরফে থাকা দরকার।
javauser71

উত্তর:


421

এসকিউএল সার্ভারে একটি আপডেট বিবৃতিতে একটি উপনাম ব্যবহারের বাক্য গঠনটি নিম্নরূপ:

UPDATE Q
SET Q.TITLE = 'TEST'
FROM HOLD_TABLE Q
WHERE Q.ID = 101;

যদিও উপনামটি এখানে প্রয়োজনীয় হওয়া উচিত নয়।


2
হ্যাঁ !!! এটা কাজ করে। দ্রুত সাড়া দেওয়ার জন্য ধন্যবাদ। যে কোনও সুযোগে আপনি কি জানেন যে কেন এমএসএসকিউএল সার্ভার আপডেটের জন্য এই জাতীয় প্রচলিত সিনট্যাক্স সমর্থন করে?
javauser71

3
মার্ক বাইয়ার্স - দুর্দান্ত উত্তর !! এই বাক্য গঠনটি আমাকে একটি মন্তব্য আউট সিলেক্ট স্টেটমেন্ট যোগ করার অনুমতি দেয়, যা আমাকে প্রথমে সিলেক্ট করে (আপডেটটি সিলেক্ট থেকে হাইলাইট করুন এবং এক্সিকিউট করতে হবে) করে আপডেটটি পরীক্ষা করতে দেয়:SET Q.TITLE = 'TEST' -- SELECT *

2
খুশী হলাম। এটি যেখানে ক্লজটিতে ইন্টেলিজেন্স ব্যবহার করা সহজ করে তোলে।
ম্যাগনাস

এটি কোনও উপনাম নয়। এটি কেবলমাত্র পুরোপুরি যোগ্যতাযুক্ত 'টেবিলের কলাম' নাম: - /
স্কটওয়েলকার

17

আপনি সর্বদা সিটিই , (সাধারণ টবুলার এক্সপ্রেশন), পন্থা নিতে পারেন।

;WITH updateCTE AS
(
    SELECT ID, TITLE 
    FROM HOLD_TABLE
    WHERE ID = 101
)

UPDATE updateCTE
SET TITLE = 'TEST';

হ্যাঁ - এটিও কাজ করে। তবে জেডিবিসি / জাভা প্রোগ্রামের জন্য এটি এক ধরণের জটিল সিনট্যাক্স। আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ.
javauser71

-1

পোস্টগ্রিসের জন্য বিশেষ মামলা

উপরের সমাধানগুলির একটি তালিকা আমার পক্ষে কাজ করবে না। সুতরাং, পোস্টগ্রিসের জন্য এখানে সমাধান

আমি আগুন হিসাবে আমার জিজ্ঞাসা

UPDATE table Q SET Q.is_active = FALSE ,Q.is_delete = TRUE WHERE Q.name = 'XYZ';

ফলাফল: ত্রুটি: সম্পর্ক "টেবিল" এর কলাম "q" বিদ্যমান নেই

সমাধান SET ডেটা মান আপনি allis ব্যবহার করার প্রয়োজন হবে না

UPDATE table Q SET is_active = FALSE ,is_delete = TRUE WHERE Q.name = 'XYZ';

হাই রনাক, আপনার উত্তরটি পোস্টগ্রিসের মতো করেই নিম্নচোট করে এবং উপরের টি-এসকিউএল এর জন্য ইতিমধ্যে একটি কার্যকরী সমাধান রয়েছে।
আল্পি মুর্জনী

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