sql server এসকিউএল সার্ভারে JOIN ব্যবহার করে একটি টেবিল আপডেট?




sql-server tsql (10)

আপনি বেশিরভাগ সিনট্যাক্স UPDATE FROM SQL সার্ভারের মালিকানা UPDATE FROM । এছাড়াও কেন আপনি CommonField যোগদান করতে এবং পরে এটিতে ফিল্টার করতে হবে তা নিশ্চিত CommonField । এটা চেষ্টা কর:

UPDATE t1
  SET t1.CalculatedColumn = t2.[Calculated Column]
  FROM dbo.Table1 AS t1
  INNER JOIN dbo.Table2 AS t2
  ON t1.CommonField = t2.[Common Field]
  WHERE t1.BatchNo = '110';

আপনি যদি সত্যিই কিছুটা নিরীহ কাজ করছেন - ক্রমাগত অন্য কলামের সমষ্টিগত এক কলামের মান সেট করার চেষ্টা করে (যা অবাঞ্ছিত ডেটা সংরক্ষণ করা এড়িয়ে চলার নীতি লঙ্ঘন করে), আপনি একটি CTE (সাধারণ টেবিল অভিব্যক্তি) ব্যবহার করতে পারেন:

;WITH t2 AS
(
  SELECT [key], CalculatedColumn = SUM(some_column)
    FROM dbo.table2
    GROUP BY [key]
)
UPDATE t1
  SET t1.CalculatedColumn = t2.CalculatedColumn
  FROM dbo.table1 AS t1
  INNER JOIN t2
  ON t1.[key] = t2.[key];

এটি সত্যিই table2 আপনি table2 পরিবর্তনের মধ্যে যেকোনো সারিতে এই সম্পূর্ণ table2 পুনরায় চালানোর জন্য যাচ্ছেন। একটি SUM এমন একটি জিনিস যা আপনি সর্বদা রানটাইম এ গণনা করতে পারেন এবং এটি করার ক্ষেত্রে, ফলাফলটি পুরনো হওয়ার বিষয়ে চিন্তা করতে হবে না।

https://code.i-harness.com

আমি টেবিলে একটি কলাম আপডেট করতে চাই, যেমন অন্য টেবিলে যোগদান করা:

UPDATE table1 a 
INNER JOIN table2 b ON a.commonfield = b.[common field] 
SET a.CalculatedColumn= b.[Calculated Column]
WHERE 
    b.[common field]= a.commonfield
AND a.BatchNO = '110'

কিন্তু অভিযোগ করা হচ্ছে:

বার্তা 170, স্তর 15, রাজ্য 1, লাইন 2
লাইন 2: 'একটি' এর কাছাকাছি ভুল সিনট্যাক্স।

এখানে কি ভুল?


আমারও একই সমস্যা ছিল .. এবং আপনাকে একটি শারীরিক কলাম যুক্ত করতে হবে না। Cuz এখন আপনাকে এটি বজায় রাখতে হবে .. আপনি যা করতে পারেন তা নির্বাচন প্রশ্নের মধ্যে জেনেরিক কলাম যুক্ত করুন:

গো EX:

select tb1.col1, tb1.col2, tb1.col3 ,
( 
select 'Match' from table2 as tbl2
where tbl1.col1 = tbl2.col1 and tab1.col2 = tbl2.col2
)  
from myTable as tbl1

আমি হালনাগাদ করার আগে একটি পরীক্ষা হিসাবে আপডেট করতে চান এমন সারি পেতে একটি নির্বাচনকে আপডেটে পরিণত করতে এটি দরকারী। যদি আমি সঠিক সারিগুলি নির্বাচন করতে চাই তবে আমি কেবল সেই সারিগুলি আপডেট করতে পারি যা আমি আপডেট করতে চাই।

DECLARE @expense_report_id AS INT
SET @expense_report_id = 1027

--UPDATE expense_report_detail_distribution
--SET service_bill_id = 9

SELECT *
FROM expense_report_detail_distribution erdd
INNER JOIN expense_report_detail erd
INNER JOIN expense_report er 
    ON er.expense_report_id = erd.expense_report_id 
    ON erdd.expense_report_detail_id = erd.expense_report_detail_id
WHERE er.expense_report_id = @expense_report_id

আরেকটি পদ্ধতির MERGE ব্যবহার করা হবে

  ;WITH cteTable1(CalculatedColumn, CommonField)
  AS
  (
    select CalculatedColumn, CommonField from Table1 Where BatchNo = '110'
  )
  MERGE cteTable1 AS target
    USING (select "Calculated Column", "Common Field" FROM dbo.Table2) AS source ("Calculated Column", "Common Field")
    ON (target.CommonField = source."Common Field")
    WHEN MATCHED THEN 
        UPDATE SET target.CalculatedColumn = source."Calculated Column";

মার্জ এসকিউএল স্ট্যান্ডার্ড অংশ

-আমিও নিশ্চিত যে অভ্যন্তরীণ যোগদান আপডেটগুলি নির্ণায়ক নয় .. এখানে একই প্রশ্ন যেখানে উত্তরটি http://ask.sqlservercentral.com/questions/19089/updating-two-tables-using-single-query.html সম্পর্কে আলোচনা করে http://ask.sqlservercentral.com/questions/19089/updating-two-tables-using-single-query.html


এটি ভালো করে দেখুন:

begin tran
    UPDATE a 
    SET a.CalculatedColumn= b.[Calculated Column]
    FROM table1 a INNER JOIN table2 b ON a.commonfield = b.[common field] 
    WHERE a.BatchNO = '110'
commit tran

এসকিউএল সার্ভার ২01২ এর মত মনে হচ্ছে Teradata এর পুরানো আপডেট সিনট্যাক্সও পরিচালনা করতে পারে:

UPDATE a
SET a.CalculatedColumn= b.[Calculated Column]
FROM table1 a, table2 b 
WHERE 
    b.[common field]= a.commonfield
AND a.BatchNO = '110'

যদি আমি সঠিকভাবে মনে করি, 2008R2 একই রকম প্রশ্নের উত্তর দেওয়ার সময় ত্রুটি প্রদান করছিল।


চেষ্টা করুন:

UPDATE table1
SET CalculatedColumn = ( SELECT [Calculated Column] 
                         FROM table2 
                         WHERE table1.commonfield = [common field])
WHERE  BatchNO = '110'

হারুন দ্বারা উপরে দেওয়া উত্তর নিখুঁত:

UPDATE a
  SET a.CalculatedColumn = b.[Calculated Column]
  FROM Table1 AS a
  INNER JOIN Table2 AS b
  ON a.CommonField = b.[Common Field]
  WHERE a.BatchNo = '110';

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

update tableName t 
set t.name = 'books new' 
where t.id = 1

আপনি যদি একক টেবিল আপডেট বা যোগদান ব্যবহার করার সময় আপডেট করা হয় ক্ষেত্রে ক্ষেত্রে হতে পারে।

যদিও উপরের প্রশ্নের পিএল / এসকিউএল ভাল কিন্তু কাজ করবে SQL সার্ভারে।

SQL সার্ভারে টেবিল উপনাম ব্যবহার করার সময় একটি টেবিল আপডেট করার সঠিক উপায়:

update t 
set t.name = 'books new' 
from tableName t 
where t.id = 1

এটা এখানে এসেছিলেন কেন সবাই সাহায্য করবে আশা করি।


MERGE table1 T
   USING table2 S
      ON T.CommonField = S."Common Field"
         AND T.BatchNo = '110'
WHEN MATCHED THEN
   UPDATE
      SET CalculatedColumn = S."Calculated Column";

    UPDATE mytable
         SET myfield = CASE other_field
             WHEN 1 THEN 'value'
             WHEN 2 THEN 'value'
             WHEN 3 THEN 'value'
         END
    From mytable
    Join otherTable on otherTable.id = mytable.id
    Where othertable.somecolumn = '1234'

এখানে আরও বিকল্পগুলি: http://www.karlrixon.co.uk/writing/update-multiple-rows-with-different-values-and-a-single-sql-query/ বহুবিধ- সারি- সহ-ভিন্ন- http://www.karlrixon.co.uk/writing/update-multiple-rows-with-different-values-and-a-single-sql-query/





sql-update