배치 업데이트를 수행하는 방법이 궁금합니다. SQL Server 2005를 사용하고 있습니다.일괄 업데이트를 수행하는 방법은 무엇입니까?
나는 sqlDataAdaptor를 보았지만 처음에는 select 문을 사용하고 데이터 집합을 채우고 데이터 집합을 변경해야하는 것처럼 보였습니다.
지금 linq을 사용하여 select를 수행하므로이 방법을 계속 사용하려고합니다. 그러나 엄청난 업데이트를하는 것은 너무 느립니다. 그래서 멀리 나는 (선택 부분에 대한)하지만 일괄 업데이 트를 다른 뭔가를 사용하여 SQL에 내 linq을 유지할 수 있습니까?
감사
편집
나는이 준비 테이블 방식에 관심이 있지만 명확하지 여전히 그것을하는 방법을 잘 모르겠습니다 더 빨리 내가 방법을 이해하지 않기 때문에 얼마나 업데이트 부분이 작동합니다.
그렇다면이 방법과 동시 연결을 처리하는 방법을 누구에게 보여줄 수 있습니까? Edit2가
이
는 XML을 사용하여 대량 업데이트를하려고 노력에서 내 최신 시도, 그러나 그것은 많은 자원을 사용하고, 내 공유 호스팅이 통과하는 것을 허용하지 않습니다이었다. 그래서 저는 다른 방법이 필요합니다. 그래서 나는 스테이징 테이블을 들여다 보지 않을 것입니다.
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 나는 당신의 말의 의미가 확실하지 않습니다. 당신이 나에게 각 레코드에 대한 업데이트 성명서를 작성하기를 원하는 것처럼 보입니다. 업데이트를 1 ~ 50,000 개 이상 업데이트해야하므로 그럴 수 없습니다. 그 시점까지는 알 수 없습니다. 3
편집 그래서 지금 내 SP입니다. 동시 연결을 할 수 있어야한다고 생각하지만 확신하고 싶었습니다.
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 레코드를 업데이트하고 싶었다. 유효성 검사는 1 분 58 초가 걸리고 대량 복사로 삽입하는 데 2 초가 걸렸으며 SQL에 linq를 사용하여 500 줄을 모두 업데이트하고 삽입하는 데 4 분이 걸렸습니다. 30,000 ~ 50,000 개 이상의 행을 업데이트해야 할 필요가 있기 때문에이 문제를 해결하고 싶습니다. 그러나 나는 선택과 조작을 수행하기 위해 linq에 SQL을 사용하고 싶지 않다. 객체로 작업하는 것이 더 쉽다. 그것이 모든 레코드를 조작해야하고 난 그냥 루프의 각 linq 개체의 값을 – chobo2
추출 할 수 있다면 쉽게 될 것 같아요 그래서 그것은 어떻게 생겼는지 상관 없어, 그리고 무엇에 던져 이제까지 필요합니다. – chobo2