मुझे आश्चर्य है कि बैच अपडेट करने का कोई तरीका है? मैं एमएस एसक्यूएल सर्वर 2005 का उपयोग कर रहा हूं।बैच अपडेट कैसे करें?
मैंने sqlDataAdaptor से दूर देखा लेकिन ऐसा लगता है कि आपको इसके साथ पहले चयन कथन करना होगा, फिर कुछ डेटासेट भरें और डेटासेट में परिवर्तन करें।
अब मैं चयन करने के लिए एसक्यूएल के लिए linq का उपयोग कर रहा हूं इसलिए मैं इसे इस तरह से रखने की कोशिश करना चाहता हूं। हालांकि बड़े पैमाने पर अपडेट करना बहुत धीमा है। तो क्या वहां है कि मैं अपने linq को sql (चुनिंदा भाग के लिए) में रख सकता हूं लेकिन बड़े पैमाने पर अद्यतन करने के लिए कुछ अलग उपयोग कर सकता हूं?
धन्यवाद
संपादित
मैं इस मचान तालिका में दिलचस्पी है, लेकिन मैं कैसे स्पष्ट नहीं यह करना है और अभी भी करने के लिए यकीन नहीं है कि यह कैसे तेजी के बाद से मुझे समझ नहीं आता कैसे हो जाएगा भाग काम अद्यतन करें।
तो क्या कोई मुझे दिखा सकता है कि यह कैसे काम करेगा और समवर्ती कनेक्शन से कैसे निपटें?
EDIT2
यह मेरा एक्सएमएल का उपयोग कर एक जन अद्यतन करने का प्रयास कर पर नवीनतम प्रयास है, लेकिन यह ज्यादा संसाधनों के लिए उपयोग करता है और किसी को अपने साझे होस्टिंग यह माध्यम से जाने की अनुमति नहीं है था। तो मुझे एक अलग तरीके की ज़रूरत है इसलिए मैं एक स्टेजिंग टेबल में क्यों नहीं देख रहा हूं।
using (TestDataContext db = new TestDataContext())
{
UserTable[] testRecords = new UserTable[2];
for (int count = 0; count < 2; count++)
{
UserTable testRecord = new UserTable();
if (count == 1)
{
testRecord.CreateDate = new DateTime(2050, 5, 10);
testRecord.AnotherField = true;
}
else
{
testRecord.CreateDate = new DateTime(2015, 5, 10);
testRecord.AnotherField = false;
}
testRecords[count] = testRecord;
}
StringBuilder sBuilder = new StringBuilder();
System.IO.StringWriter sWriter = new System.IO.StringWriter(sBuilder);
XmlSerializer serializer = new XmlSerializer(typeof(UserTable[]));
serializer.Serialize(sWriter, testRecords);
using (SqlConnection con = new SqlConnection(connectionString))
{
string sprocName = "spTEST_UpdateTEST_TEST";
using (SqlCommand cmd = new SqlCommand(sprocName, con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlParameter param1 = new SqlParameter("@UpdatedProdData", SqlDbType.VarChar, int.MaxValue);
param1.Value = sBuilder.Remove(0, 41).ToString();
cmd.Parameters.Add(param1);
con.Open();
int result = cmd.ExecuteNonQuery();
con.Close();
}
}
}
@ फ्रेडरिक जोहानसन मुझे यकीन नहीं है कि आपकी कहानियां क्या काम करेगी। ऐसा लगता है कि मैं चाहता हूं कि आप मुझे प्रत्येक रिकॉर्ड के लिए एक अपडेट स्टेटमेंट बनाना चाहते हैं। मैं ऐसा नहीं कर सकता क्योंकि मुझे 1 से 50,000+ रिकॉर्ड अपडेट करने की आवश्यकता होगी और मुझे उस बिंदु तक पता नहीं चलेगा।
संपादित 3
तो यह मेरी सपा अब है। मुझे लगता है कि यह समवर्ती कनेक्शन करने में सक्षम होना चाहिए लेकिन मैं सुनिश्चित करना चाहता था।
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_MassUpdate]
@BatchNumber uniqueidentifier
AS
BEGIN
update Product
set ProductQty = 50
from Product prod
join StagingTbl stage on prod.ProductId = stage.ProductId
where stage.BatchNumber = @BatchNumber
DELETE FROM StagingTbl
WHERE BatchNumber = @BatchNumber
END
क्या आप अपनी टिप्पणी को समझा सकते हैं/औचित्य साबित कर सकते हैं। LINQ-to-SQL अद्यतन प्रदर्शन समस्याएं? –
असल में यह नीचे आता है। मैं 500 रिकॉर्ड डालना चाहता था और 500 रिकॉर्ड अपडेट करना चाहता था। प्रमाणीकरण में 1min और 58 सेकंड लग गए, थोक प्रतिलिपि के साथ डालने से 2 सेकंड्स ले गए और सभी 500 पंक्तियों को अपडेट करने के लिए linq का उपयोग करके एसक्यूएल का उपयोग करके उन्हें 4 मिनट लग गए। मैं इसे नीचे ले जाना चाहता हूं क्योंकि मुझे शायद 30,000 से 50,000 पंक्तियों के ऊपर अपडेट करने की आवश्यकता होगी। हालांकि मैं चयन और हेरफेर करने के लिए linq को sql नहीं करना चाहता क्योंकि मुझे किसी ऑब्जेक्ट के साथ काम करना आसान लगता है। मुझे यह पता नहीं चलता कि यह अपडेट की बात आती है जब यह दिखता है क्योंकि यह आसान होना चाहिए क्योंकि मेरे पास सभी रिकॉर्ड्स में हेरफेर किया गया है और मैं सिर्फ – chobo2
प्रत्येक लिनक ऑब्जेक्ट के मानों को लूप के साथ निकाल सकता हूं और इसे फेंक सकता हूं कभी जरूरी है – chobo2