الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحديث على جدول يتكون من 800 الف سطر

بدأه elbry1907 في 5 يونيو 2011 · 4 رد · 740 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اقوم بعمل تقرير معين ومن ضمن التقرير يجب تحديث الجدول بارقام على حسب متغير معين ....

المشكلة :- ان التحديث يتم على جدول يحتوى على 800 الف سطر ( سجل )

اضع جملة التحديث داخل الفيجول بيزك وبعد فترة تخرج رسالة خطا (Requset Time out)

هل يوجد اى حل اخر لتقسيم العمل مثلا ...

تحديدا هذه هى الجمل

UPDATE TABLE1 Set [sales Staff] = 1 Where Quantity > 0

UPDATE TABLE1 Set [sales Staff] = -1 Where Quantity < 0

#2

أعتقد والله أعلم أن السبب يعود إلى أن تنفيذ الاستعلامين يحدث بشكل متتابع لا يكون الفرق بينهما أجزاء الثانية (لا يمكن التأكد إلا بالتنقيح أو إضافة شئ إلى البرنامج بعد الاستعلامين لنرى هل يتم تنفيذه فوراً أم بعد انتهاء الاستعلامين بعد فترة من الوقت)

قد -وأنا غير متأكد لأني لم أتعرض لهذه المشكلة من قبل- يكون الحل من خلال تنفيذ الاستعلام الأول بشكل غير متزامن Async وتنفيذ الاستعلام الثاني بعد التأكد من تنفيذ الاستعلام الأول، أيضاً بشكل غير متزامن..

كيف تقوم بهذا برمجياً؟ عليك بسؤال أصحاب الاختصاص في قسم البرمجة بالفيجوال بيسك.

والله أعلى وأعلم.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

السلام عليكم ورحمه الله وبركاته

اخي انصحك بعمل Batches في قاعدة البيانات على النحو التالي


DECLARE @RetVal INTEGER
SET @RetVal = 1


WHILE @RetVal > 0
BEGIN
UPDATE TOP(10000) SET [Sales Staff] = 1 FROM dbo.Table1
WHERE Quantity > 0
SET @RetVal = @@ROWCOUNT;
WAITFOR DELAY ’00:00:10′ — Optional (Wait 10 seconds between Updates so we don’t hose the system).
END


DECLARE @RetVal INTEGER
SET @RetVal = 1


WHILE @RetVal > 0
BEGIN
UPDATE TOP(10000) SET [Sales Staff] = -1 FROM dbo.Table1
WHERE Quantity < 0
SET @RetVal = @@ROWCOUNT;
WAITFOR DELAY ’00:00:10′ — Optional (Wait 10 seconds between Updates so we don’t hose the system).
END

.:: Wish to become better and better ::.

#4

المشكلة ان الوقت المستغرق في تنفيذ الاستعلام طويل لذا تحتاج الى رفع قيمة CommandTimeout

اقتباس

Dim con As New Connection

con.Open "..."

con.CommandTimeout = 300

con.Execute "update ..."

con.Execute "update ..."

#5
TareqVB كتب:

المشكلة ان الوقت المستغرق في تنفيذ الاستعلام طويل لذا تحتاج الى رفع قيمة CommandTimeout

تمت التجربة ورفع الوقت الى 3000 ثانية :D وظبطت الحمد لله

مواضيع مشابهة