2013-02-11 15 views
8

मेरे पास एक मौजूदा MSSQL डेटाबेस है जहां कुछ कॉलम में मानों को एक स्प्रेडशीट के अनुसार अद्यतन करने की आवश्यकता होती है जिसमें पुराने डेटा और नए डेटा के मैपिंग शामिल होते हैं।स्प्रेडशीट से मौजूदा डेटाबेस मान अपडेट करें

स्प्रेडशीट इस तरह है:

 | OLD DATA  | NEW DATA  | 
RECORD | A | B | C | D | A | B | C | D | 
1  |OLD|OLD|OLD|OLD|NEW|NEW|NEW|NEW| 
2  |OLD|OLD|OLD|OLD|NEW|NEW|NEW|NEW| 

कहाँ एबीसीडी स्तंभ नाम है, जो डेटाबेस से संबंधित हैं, और पुराने/नई डेटा से संबंधित है।

प्रत्येक पंक्ति के लिए

इस प्रकार (लगभग 2500 पंक्तियाँ)

डेटाबेस मूल्यों कि प्रत्येक स्तंभ में पुराने से मेल खाते हैं, इस के लिए एक समान तरीके से यह करने के लिए नई

मेरे वर्तमान विचारों को बदलने की जरूरत है कर रहे हैं : SQL Statement that Updates an Oracle Database Table from an Excel Spreadsheet

अनिवार्य रूप से एक्सेल को प्रतिस्थापन विवरणों की एक सूची बनाने के लिए प्राप्त करना, हालांकि यह समस्या से निपटने के लिए एक बेहद जटिल तरीके से लगता है!

क्या स्प्रेडशीट की प्रत्येक पंक्ति के बावजूद एसक्यूएल चक्र होने का कोई तरीका है, एक = पुरानी, ​​बी = पुरानी 2, सी = पुरानी 3, डी = पुरानी 4 के लिए सभी रिकॉर्ड्स जांचें और फिर उन मानों को उपयुक्त एक = नया, बी = नया 2, सी = नया 3, डी = नया 4?

+0

आप अपने एक्सेल फ़ाइल के स्वरूप को बदल सकते हैं, प्रत्येक स्तंभ (अर्थात रिकार्ड, Olda, OldB, Newa, newb) के लिए अद्वितीय कॉलम हेडर दे रही है कुछ ऐसा दिखाई देगा? – sgeddes

+0

हां - एक्सेल फ़ाइल को स्वतंत्र रूप से tweaked करने में सक्षम है – sbozzie

+0

जेफ का जवाब नीचे वही था जो मैं सोच रहा था कि आप अपने कॉलम नाम बदल सकते हैं। अगर आपको इसके साथ कोई परेशानी है तो हमें बताएं। सौभाग्य। – sgeddes

उत्तर

11

आपको स्प्रेडशीट में प्रत्येक पंक्ति के माध्यम से लूप करने की आवश्यकता नहीं है। आप स्प्रेडशीट डेटा को एक प्रकार की अस्थायी तालिका में लोड करने के लिए, OPENROWSET कमांड का उपयोग कर सकते हैं, जैसा कि आपने लिंक किया था। फिर आप उस तालिका के खिलाफ नियमित UPDATE कथन चला सकते हैं।

यह इस

UPDATE YourTable 
SET YourTable.A = ExcelTable.NewDataA, 
    YourTable.B = ExcelTable.NewDataB, 
    YourTable.C = ExcelTable.NewDataC, 
    YourTable.D = ExcelTable.NewDataD 
FROM YourTable 
INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
     'Excel 8.0;Database=C:\foldername\spreadsheetname.xls;', 
     'SELECT column1name, column2name, column3name, column4name 
      FROM [worksheetname$]') AS ExcelTable 
ON YourTable.ID = ExcelTable.ID 
WHERE (YourTable.A = ExcelTable.OldDataA 
    AND YourTable.B = ExcelTable.OldDataB 
    AND YourTable.C = ExcelTable.OldDataC 
    AND YourTable.D = ExcelTable.OldDataD) 
+0

वू! यह वास्तव में अच्छा काम करता है, धन्यवाद :) कॉलम नाम रोलिंग प्राप्त करने के लिए थोड़ा सा झुकाव (नए डेटा में डेटा का एक अतिरिक्त कॉलम जोड़ा गया था) लेकिन अब मुझे एक्सेल -> एसक्यूएल के बारे में पता है! – sbozzie

संबंधित मुद्दे