Tôi tự hỏi có cách nào để cập nhật hàng loạt không? Tôi đang sử dụng máy chủ sql ms 2005.Làm thế nào để thực hiện cập nhật hàng loạt?
Tôi đã thấy bằng cách sử dụng sqlDataAdaptor nhưng có vẻ như trước tiên bạn phải chọn câu lệnh với nó, sau đó điền một số tập dữ liệu và thực hiện thay đổi cho tập dữ liệu.
Bây giờ tôi đang sử dụng LINQ to sql để thực hiện lựa chọn vì vậy tôi muốn cố gắng giữ nó theo cách đó. Tuy nhiên nó là quá chậm để làm cập nhật lớn. Vì vậy, có đi mà tôi có thể giữ linq của tôi để sql (cho phần chọn) nhưng bằng cách sử dụng một cái gì đó khác nhau để làm cập nhật hàng loạt?
Cảm ơn
Sửa
Tôi quan tâm đến cách dàn dựng bảng này, nhưng tôi không chắc chắn làm thế nào để làm điều đó và vẫn chưa rõ làm thế nào nó sẽ nhanh hơn kể từ khi tôi không hiểu như thế nào phần cập nhật hoạt động.
Vì vậy, bất kỳ ai cũng có thể cho tôi biết cách thức này sẽ hoạt động và cách xử lý các kết nối đồng thời?
Edit2
Đây là nỗ lực mới nhất của tôi lúc cố gắng để làm một cập nhật hàng loạt sử dụng xml tuy nhiên nó sử dụng các nguồn lực nhiều và lưu trữ chia sẻ của tôi không cho phép nó đi qua. Vì vậy, tôi cần một cách khác nhau để thats lý do tại sao tôi không nhìn vào một bảng dàn dựng.
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();
}
}
}
@ Fredrik Johansson Tôi không chắc chắn câu nói của bạn sẽ hoạt động. Có vẻ như với tôi, bạn muốn tôi đưa ra tuyên bố cập nhật cho mỗi bản ghi. Tôi không thể làm điều đó vì tôi sẽ cần cập nhật 1 đến 50.000 bản ghi và tôi sẽ không biết cho đến thời điểm đó.
Sửa 3
Vì vậy, đây là SP của tôi bây giờ. Tôi nghĩ rằng nó sẽ có thể làm kết nối đồng thời nhưng tôi muốn chắc chắn.
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
Bạn có thể giải thích/biện minh cho bình luận của mình lại không. Các vấn đề hiệu suất cập nhật LINQ to SQL? –
Về cơ bản nó đi xuống này. Tôi muốn chèn 500 bản ghi và cập nhật 500 bản ghi. Xác nhận mất 1 phút và 58 giây, chèn với bản sao số lượng lớn mất 2seconds và sử dụng LINQ to sql để cập nhật tất cả 500 hàng và chèn chúng mất 4 phút. Tôi muốn nhận được rằng kể từ khi tôi có thể sẽ cần phải cập nhật lên tới 30.000 đến 50.000 hàng. Tuy nhiên tôi không muốn linq để sql để làm việc lựa chọn và thao tác như tôi thấy nó dễ dàng hơn để làm việc với một đối tượng. Tôi không quan tâm khi nói đến bản cập nhật những gì nó trông giống như nó sẽ được dễ dàng nếu tôi có tất cả các hồ sơ thao tác và tôi chỉ có thể trích xuất các giá trị – chobo2
của mỗi đối tượng LINQ với một vòng lặp for và ném nó vào những gì bao giờ là bắt buộc. – chobo2