2015-01-28 2 views
0

SQL Server에서 동시에 처리 할 수있는 트랜잭션 당 얼마나 많은 수의 INSERT 명령을 알고 있습니까? 기본적으로, 나는이 함수 SQLexcute(sql_text)를 사용하여 실행되는 나는 INSERT 년대의 무리와 함께 긴 문자열 짓고 있어요 (8000 INSERT 명령 주위를, 각각 약 600 문자가) :SQL Server에서 트랜잭션 당 최대 삽입 수

for(obj in objects) { 
    sql_text += "INSERT(prop1, prop2, prop3, prop4, prop5) VALUES(" + obj.prop1 + "," + obj.prop2 + "," + obj.prop3 + "," + obj.prop4 + "," + obj.prop5+");" 
} 
SQLexcute(sql_text) 
+0

난 당신이 쿼리 텍스트를 생성하는 백엔드에 C#을 사용하고 추정하고 있습니다 : 여기

당신은 테이블 가치 PARAM에 대한 링크가 stringbuilder를 사용하여 문자열을 연결하는 대신 문자열에 무언가를 추가 할 때마다 문자열의 새 인스턴스가 만들어집니다 (C#의 문자열은 변경 불가능). SQL 질의에 이르기까지 한 번에 8000 개의 레코드를 삽입하는 것은 그다지 큰 문제가되지 않습니다. 또한 SQL 쿼리를 생성하기 전에 객체 속성에 대한 데이터를 정리하고 SQL 주입을 허용하지 않는다고 가정합니다. – user2366842

+2

한 가지 명심해야 할 점은 SQL Server는 ** 한 번에 5000 개가 넘는 행을 삽입 할 경우 ** 테이블 수준의 단독 잠금 **으로 잠금을 ** 에스컬레이션합니다 ** - ** INSERT' 트랜잭션이 커밋 될 때까지 ** 예외적으로 잠길 것입니다 ** - 그 테이블에서 다른 작업 ('SELECT'조차도 가능하지 않습니다)이 그 테이블에서 가능하지 않습니다. –

+1

제발 제발 * 문자열을 함께 쓰지 마세요. C# 인 경우'SqlCommand'에서'SqlParameter'를 사용하십시오.) : http://www.sommarskog.se/dynamic_sql.html#SQL_injection PS 쿼리 텍스트에 테이블 이름이 누락되었습니다. – Bridge

답변

0

숀 권리입니다.

mosel에서 코드를 실행하지 마십시오. 당신은 T-SQL로 쿼리를 생성하고 거기에 매개 변수를 전달해야합니다. 내가 올바른 해요, 당신이 정말로해야,

Tabled valued param

+0

유일한 인터페이스가 ODBC 인 경우 TVP가 작동하지 않습니다. https://www.msi-jp.com/xpress/learning/square/%28B%29Modeling%20and%20problem_Summary.pdf (101 페이지에서 시작) . –

관련 문제