sql server - SQL सर्वर में जॉइन का उपयोग कर एक तालिका अद्यतन करें?




sql-server tsql (6)

आपके पास वाक्यविन्यास UPDATE FROM SQL सर्वर का स्वामित्व UPDATE FROM नहीं है। यह भी सुनिश्चित नहीं है कि आपको 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';

यदि आप वास्तव में कुछ मूर्खतापूर्ण कर रहे हैं - जैसे कि एक कॉलम के मूल्य को दूसरे कॉलम के कुल में सेट करने की कोशिश करना (जो अनावश्यक डेटा संग्रह से बचने के सिद्धांत का उल्लंघन करता है), तो आप एक सीटीई (सामान्य तालिका अभिव्यक्ति) का उपयोग कर सकते हैं:

;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 में किसी भी पंक्ति में हर बार इस पूरे अपडेट को फिर से चलाने की आवश्यकता होगी। एक SUM ऐसा कुछ है जिसे आप हमेशा रनटाइम पर गणना कर सकते हैं और ऐसा करने में, चिंता करने की ज़रूरत नहीं है कि परिणाम पुराना है।

मैं किसी तालिका में एक कॉलम को अन्य तालिका में शामिल करने के लिए अपडेट करना चाहता हूं उदाहरण के लिए:

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: 'ए' के ​​पास गलत वाक्यविन्यास।

यहाँ क्या गलत है?


इसे इस तरह से आजमाएं:

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

(संपादित करें: डर्न टाइपो!)


ऐसा लगता है कि SQL Server 2012 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';

बस यह जोड़ना चाहते हैं कि SQL सर्वर में यह समस्या क्यों होती है जब हम उस तालिका को अद्यतन करते समय किसी तालिका के उपनाम का उपयोग करने का प्रयास करते हैं, तो नीचे वाक्यविन्यास हमेशा त्रुटि देगा:

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

उम्मीद है कि यह हर किसी की मदद करेगा क्यों त्रुटि यहां आई।








sql-update