ID 열이 있는 SqlBulkCopy 삽입
는 사용중다니입▁the를 사용하고 있습니다.SqlBulkCopy
생성된 2백만 개의 행을 데이터베이스에 삽입하는 개체입니다.유일한 문제는 제가 삽입하는 테이블에 ID 열이 있다는 것입니다.는 설해보았다니습정▁the다▁setting를 설정해 보았습니다.SqlBulkCopyOptions
SqlBulkCopyOptions.KeepIdentity
을 ID 을열다설니다정합로로 합니다.0
의,DbNull.Value
그리고.null
아무 것도 효과가 없었습니다.저는 제가 꽤 간단한 것을 놓치고 있는 것처럼 느껴집니다, 만약 누군가가 저를 깨우쳐준다면 그것은 환상적일 것입니다.감사합니다!
편집 명확하게 하기 위해 ID 값을 설정하지 않았습니다.DataTable
수입하고 있습니다.나는 그것들이 수입의 일부로 생성되기를 원합니다.
편집 2 기본을 만드는 데 사용하는 코드입니다.SqlBulkCopy
물건.
SqlBulkCopy sbc = GetBulkCopy(SqlBulkCopyOptions.KeepIdentity);
sbc.DestinationTableName = LOOKUP_TABLE;
private static SqlBulkCopy GetBulkCopy(SqlBulkCopyOptions options =
SqlBulkCopyOptions.Default)
{
Configuration cfg = WebConfigurationManager.OpenWebConfiguration("/RSWifi");
string connString =
cfg.ConnectionStrings.ConnectionStrings["WifiData"].ConnectionString;
return new SqlBulkCopy(connString, options);
}
대상 테이블에 ID를 할당하려면SqlBulkCopyOptions.KeepIdentity
선택.대신 소스에서 ID를 매핑하지 말고 소스에서 추출하여 다음으로 전송하지 마십시오.SqlBulkCopy
.
다음 항목을 채웁니다.BulkCopy
개체 및 ID 열을 매핑하지 않습니다.대상 데이터베이스에서 ID 열을 생성합니다.
두 가지 옵션이 있습니다.
-1 사용 - 사용KeepIdentity
▁and▁preserve▁the 보존합니다.Identity
가치.
.Identity
필드. 값을 할당하지 않으면 대상 테이블이 자동으로 값을 할당합니다.
이것은 테이블입니다.
CREATE TABLE [dbo].[ProductShippingMethodMap](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ProductId] [int] NOT NULL,
[ShippingMethodId] [int] NOT NULL,
[ParentProductId] [int] NOT NULL,
CONSTRAINT [PK_ProductShippingMethodMap] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
아래 C# 코드가 작동 중입니다.
DataTable dtQtyData = new DataTable();
dtQtyData.Clear();
dtQtyData.Columns.Add("Id", typeof(int));
dtQtyData.Columns.Add("ProductId", typeof(int));
dtQtyData.Columns.Add("ShippingMethodId", typeof(int));
dtQtyData.Columns.Add("ParentProductId", typeof(int));
for (int i = 0; i < ShippingMethodIds.Length; i++)
{
for (int j = 0; j < ProductIds.Length; j++)
{
var productId = ProductIds[j];
var shippingMethodId = ShippingMethodIds[i];
dtQtyData.Rows.Add(new object[] {0,productId, shippingMethodId, parentProductId });
}
}
var connectionString = new DataSettingsManager().LoadSettings().DataConnectionString;
SqlBulkCopy bulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.Default);
bulkcopy.DestinationTableName = "ProductShippingMethodMap";
bulkcopy.WriteToServer(dtQtyData);
.NET했습니다.NET에서 이렇게 풀었습니다 (dt
데이터 테이블임):
dt.Columns.Cast<DataColumn>().ForEach((c, i) => sqlBulkCopy.ColumnMappings.Add(c.ColumnName, i + 1));
은 기본적으로합니다.Id
) 에는 목적지 0 ~ 1이
예, 올바른 사용 방법입니다.SqlBulkCopyOptions.KeepIdentity
옵션을 선택하면 대량 복사 작성자는 이 개체를 시작 열에서 쓰는 테이블 구조가 무엇이라고 생각하지 않습니다. 의, 는 내 를 보존하기 같은 . 단지 의 데이터 을 만들고 이합니다.나는 내 테이블의 ID 필드를 보존하기 위해 동일한 방법으로 하고 있습니다. 단지 당신은 나머지 필요한 열로 데이터 테이블 개체에 추가 열을 만들고 이 열에 null 값을 전달하면 테이블이 자동으로 ID를 처리합니다.
JDBC SQLServerBulkCSV FileRecord 구조를 사용하는 경우 ID 열을 매핑해야 하지만 ID 열의 값은 무시됩니다.
제 경우에는 열 이름과 열 중 하나에서 SQL 테이블에서 밑줄(_) 대신 하이폰(-)을 실수로 사용한 빈 공간으로 밝혀졌습니다.sql table에서 빈칸과 하이폰을 언더스코어로 교체했더니 문제가 해결되었습니다.
원인:- 데이터 끝에 있는 엑셀에 빈 행이 몇 개 있어 빈 행처럼 보입니다.대량 업로드에서 빈 행을 테이블에 업로드하려고 했습니다.
솔루션 : - 데이터가 포함된 행만 선택 - 데이터를 새 시트에 복사합니다.'시트 1'에 데이터가 있다고 가정하고 '시트 2'로 이동한 후 '시트 1'을 삭제합니다.
언급URL : https://stackoverflow.com/questions/6651809/sqlbulkcopy-insert-with-identity-column
'programing' 카테고리의 다른 글
공통 필드가 없는 두 테이블 결합 (0) | 2023.07.05 |
---|---|
도커 합성 및 도커 기계를 사용하여 mongoDB용 외부 볼륨을 탑재하는 방법 (0) | 2023.07.05 |
선택 쿼리에 대한 최적의 가져오기 크기를 확인하는 방법 (0) | 2023.06.30 |
R 데이터 프레임에서 'Inf' 값 정리 (0) | 2023.06.30 |
데이터베이스에서 문자열 일부 검색 및 바꾸기 (0) | 2023.06.30 |