Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में जॉइन का उपयोग करके तालिका अपडेट करें?

आपके पास 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 ऐसा कुछ है जिसे आप हमेशा रनटाइम पर गणना कर सकते हैं और ऐसा करने में, कभी भी चिंता करने की ज़रूरत नहीं है कि परिणाम पुराना है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Cursor Types - LOCAL और GLOBAL Cursor में क्या अंतर है | SQL सर्वर ट्यूटोरियल / TSQL ट्यूटोरियल

  2. SQL सर्वर टेबल:@, # और ## में क्या अंतर है?

  3. SQL सर्वर आंतरिक:योजना कैशिंग पीटी। मैं - पुन:उपयोग योजना

  4. संदर्भित तालिका में कोई प्राथमिक या उम्मीदवार कुंजी नहीं है जो विदेशी कुंजी में संदर्भ कॉलम सूची से मेल खाती है

  5. DATETIME कॉलम के लिए रैंडम मान