এসকিউএলে একাধিক কলাম আপডেট করুন


166

এসকিউএল সার্ভারে সন্নিবেশ বিবৃতি ব্যবহার করার একই পদ্ধতিতে কী একাধিক কলাম আপডেট করার উপায় আছে?

কিছুটা এইরকম:

Update table1 set (a,b,c,d,e,f,g,h,i,j,k)=
(t2.a,t2.b,t2.c,t2.d,t2.e,t2.f,t2.g,t2.h,t2.i,t2.j,t2.k)
from table2 t2
where table1.id=table2.id

বা এর মতো কিছু, এর চেয়ে বেশি:

update table set a=t2.a,b=t2.b etc 

যদি আপনার 100+ কলাম থাকে তবে এটি লিখতে বেশ ক্লান্তিকর হতে পারে।


এটি ত্রুটির পক্ষে বেশ প্রবণ বলে মনে হচ্ছে
AD7six

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

উত্তর:


89

"ক্লান্তিকর উপায়" হ'ল মানক এসকিউএল এবং কীভাবে মূলধারার আরডিবিএমএস এটি করে।

১০০+ কলামের সাহায্যে আপনার বেশিরভাগই ডিজাইনের সমস্যা রয়েছে ... এছাড়াও ক্লায়েন্ট সরঞ্জামগুলিতে প্রশমন পদ্ধতি রয়েছে (উদাহরণস্বরূপ জেনারেশন আপডেট আপডেট) বা ORM গুলি ব্যবহার করে


5
সুতরাং এমএসএসকিউএলে এটি করার অন্য কোনও উপায় নেই?
জো

4
@ জো: না নীচে অ্যালেক্স কে এর উত্তর দেখুন ( stackoverflow.com/a/9079904/27535 ),
এমএসকে

আমি মনে করি 1keydata.com/sql/sqlupdate.html "SET কলাম_1 = [মান 1], কলাম 2 = [মান 2]"
ডিল করুন

রাজি পুনরায়। নকশার সমস্যা সাধারণ শর্তে তবে এমন পরিস্থিতিতে রয়েছে যেখানে বাল্ক বৈধতা / ডেটা পরিষ্কারের প্রয়োজন হতে পারে। আমি বর্তমানে এটি করার সাথে জড়িত এবং এসকিউএল সার্ভার ২০১২ এ আপনি এখন নীচে নীচে @ জন উউ উত্তর অনুসারে 1 টিরও বেশি কলাম আপডেট করতে পারবেন।
হিলারি

201

এটা চেষ্টা কর:

UPDATE table1 
SET a = t2.a, b = t2.b, .......
FROM table2 t2
WHERE table1.id = t2.id

ওরাকল বাদ দিয়ে বেশিরভাগ এসকিউএল উপভাষায় কাজ করা উচিত।

এবং হ্যাঁ - এটি অনেক টাইপিং - এসকিউএল এটি করে।


4
এটি ওরাকলে কাজ করবে না: docs.oracle.com/javadb/10.6.2.1/ref/rrefsqlj26498.html
রাফা

16
ওহে. আপনার ঠিক আছে, তবে আমি কেবল এটিই বলতে চাইছিলাম এটি কোনও এসকিউএল উপভাষায় কাজ করবে না।
রাফাł

3
মাইএসকিউএল-এ কাজ করে।
জোও ফারিয়াস


19

আপনার জিজ্ঞাসাটি প্রায় সঠিক। এর জন্য টি-এসকিউএল হ'ল:

UPDATE  Table1
SET     Field1 = Table2.Field1,
        Field2 = Table2.Field2,
        other columns...
FROM    Table2
WHERE   Table1.ID = Table2.ID

আমি সন্দেহ করি যে ওপি সবেমাত্র একটি উলাম ব্যবহার করেছে কারণ প্রশ্নটি সিনট্যাক্সের সঠিকতা সম্পর্কিত নয়, তবে এই সিনট্যাক্সটির "কেন"। : ব্যক্তিগতভাবে, আমি সর্বত্র মত আমি এখানে করেনি alias লেখা ব্যবহার পছন্দ stackoverflow.com/a/982947/27535
gbn



4

আমি এইভাবে চেষ্টা করেছি এবং এটির কাজ ঠিকঠাক করেছি:

UPDATE 
  Emp
SET 
  ID = 123, 
  Name = 'Peter' 
FROM 
  Table_Name

এটি আমার পোস্টগ্রিজ এসকিউএল 12.2 ইনস্টলেশন (ডিবিভার ব্যবহার করে পরীক্ষা করা হয়েছে) এর জন্য দুর্দান্ত কাজ করছে বলে মনে হচ্ছে।
টেল্মো ট্রুপার


1

আপনার যদি বেশ কয়েকটি বার এটি পুনরায় টাইপ করতে হয় তবে আপনি একবারের মতো করতে পারেন। আপনার কলামগুলি - নামগুলি এক্সেল শীটে সারিগুলিতে পান (প্রতিটি কলামের শেষে (=) যা নোটপ্যাড ++-তে সহজ) এর ডান পাশে আপনার মানটি অনুলিপি করে আটকানোর জন্য একটি কলাম তৈরি করুন যা নতুন এন্ট্রিগুলির সাথে সামঞ্জস্য করবে প্রতিটি কলাম তারপরে তাদের ডানদিকে একটি স্বাধীন কলামে নকশা অনুযায়ী কমাগুলি রেখে দিন

তারপরে আপনাকে প্রতিবার মধ্য কলামে আপনার মানগুলি অনুলিপি করতে হবে তারপরে কেবল পেস্ট করুন এবং চালান

এর থেকে সহজ সমাধান আমি জানি না


0

আমি আপনার সাথে শেয়ার করতে চাই আমি কীভাবে এই ধরণের প্রশ্নটিকে সম্বোধন করি। আমার কেসটি টেবিল 2 এর ফলাফলটি গতিশীল হওয়ার কারণে সামান্য আলাদা এবং কলামের সংখ্যাগুলি টেবিল 1 এর চেয়ে কম হতে পারে। তবে ধারণাটি একই রকম।

প্রথমত, টেবিল 2 এর ফলাফল পান।

এখানে চিত্র বর্ণনা লিখুন

এরপরে, এটি অপরিবর্তিত করুন।

এখানে চিত্র বর্ণনা লিখুন

তারপরে ডায়নামিক এসকিউএল ব্যবহার করে আপডেট ক্যোয়ারী লিখুন। নমুনা কোড 2 টি সাধারণ টেবিল - টিবিএলএ এবং টিবিএলবি পরীক্ষার জন্য লেখা হয়

--CREATE TABLE tblA(id int, col1 VARCHAR(25), col2 VARCHAR(25), col3 VARCHAR(25), col4 VARCHAR(25))
--CREATE TABLE tblB(id int, col1 VARCHAR(25), col2 VARCHAR(25), col3 VARCHAR(25), col4 VARCHAR(25))
--INSERT INTO tblA(id, col1, col2, col3, col4)
--VALUES(1,'A1','A2','A3','A4')
--INSERT INTO tblB(id, col1, col2, col3, col4)
--VALUES(1,'B1','B2','B3','B4')

DECLARE @id VARCHAR(10) = 1, @TSQL NVARCHAR(MAX)
DECLARE @tblPivot TABLE(    
    colName VARCHAR(255),
    val VARCHAR(255)
)

INSERT INTO @tblPivot
SELECT colName, val
FROM tblB
UNPIVOT
(
    val
    FOR colName IN (col1, col2, col3, col4)
) unpiv
WHERE id = @id

SELECT @TSQL = COALESCE(@TSQL + '''
,','') + colName + ' = ''' + val
FROM @tblPivot

SET @TSQL = N'UPDATE tblA
SET ' + @TSQL + ''' 
WHERE id = ' + @id
PRINT @TSQL
--EXEC SP_EXECUTESQL @TSQL

PRINT @TSQL ফলাফল:

এখানে চিত্র বর্ণনা লিখুন


-3

আমি এটি মাইএসকিএলে করেছি এবং এটি একক রেকর্ডে একাধিক কলাম আপডেট করেছে, তাই আপনি যদি মাইএসকিউএলকে আপনার সার্ভার হিসাবে ব্যবহার করেন তবে এটি চেষ্টা করুন:

"UPDATE creditor_tb SET credit_amount='" & CDbl(cur_amount) & "'
                   , totalamount_to_pay='" & current_total & "',   
        WHERE credit_id='" & lbcreditId.Text & "'". 

যাইহোক, আমি মাইএসকিএল সার্ভারটি ব্যবহার করে vb.net এ কোডিং করছিলাম তবে আপনি মাইএসকিউএলকে আপনার সার্ভার হিসাবে ব্যবহার করার ক্ষেত্রে আপনি এটি আপনার প্রিয় প্রোগ্রামিং ভাষায় নিতে পারেন।



-8
update T1
set T1.COST2=T1.TOT_COST+2.000,
T1.COST3=T1.TOT_COST+2.000,
T1.COST4=T1.TOT_COST+2.000,
T1.COST5=T1.TOT_COST+2.000,
T1.COST6=T1.TOT_COST+2.000,
T1.COST7=T1.TOT_COST+2.000,
T1.COST8=T1.TOT_COST+2.000,
T1.COST9=T1.TOT_COST+2.000,
T1.COST10=T1.TOT_COST+2.000,
T1.COST11=T1.TOT_COST+2.000,
T1.COST12=T1.TOT_COST+2.000,
T1.COST13=T1.TOT_COST+2.000
from DBRMAST T1 
inner join DBRMAST t2 on t2.CODE=T1.CODE

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