SQL 대량 복사 업로드에서 Excel 시트 열 값 null 인 경우 바인딩 기본값

asp.net asp.net-mvc-4 c# sqlbulkcopy sql-server

문제

SQL 대량 복사 업로드 방법을 사용하여 데이터베이스에 데이터를 업로드 할 수있는 mvc 4 응용 프로그램을 만들었습니다.

엑셀 파일을 선택하면 데이터를 시스템에 업로드 할 수 있습니다.

이 잘 작동하고, 이제 필드를 Excel 경우 기본 값을 추가하려면 null입니다.

이것은 탁월한 컬럼 값을 추출하는 방법입니다.

     "s1.Gender, " +
     "s1.Country_of_Birth, " +
     "s1.Date_of_Birth, " +

코드 수준에서 기본값을 추가하고 싶습니다. 이미 데이터베이스 수준을 사용하여 처리합니다.

예를 들어 "생년월일"에 대한 기본값을 추가하려면 다음 제약 조건을 추가했습니다.

ALTER TABLE [dbo].[tbl_HEI_student] ADD  CONSTRAINT [DF_tbl_HEI_student_Date_of_Birth]  DEFAULT (getdate()) FOR [Date_of_Birth]

하지만 db에 Excel 파일을 업로드 할 때 SQL 대량 복사 업로드 방법은 해당 기본값 데이터베이스를 추가하는 것을 무시합니다.

컨트롤러 메서드에서 기본값을 어떻게 추가 할 수 있습니까?

인기 답변

문제는 열이 NULL을 허용해야한다는 것입니다.

당신의 컬럼이 NULL을 허용하고 당신이 삽입에 NULL 값을 제공한다면 NULL이 삽입 될 입니다. 열에 값이 제공되지 않으면 DEFAULT가 고려됩니다.

열을 NOT NULL로 설정하십시오.

ALTER TABLE [dbo].[tbl_HEI_student] ALTER COLUMN [Date_of_Birth] DATE NOT NULL

다음은 기본 정의 입니다.

편집하다:

주목 해 주신 바와 같이 NULLS를 해당 열에 BulkInsert하여 DEFAULT 값을 SqlServer 측에 우선 적용 할 수는 없으며 제안 된 NOT NULL은 값이 제공되지 않거나 NULL이 아닌 다른 값을 적용하도록 제안합니다.

몇 가지 옵션을 볼 수 있습니다.

  • 그들과 함께 거래를합니다. NET에서 기본값으로 값을 설정하여 (당신은 당신이 도움을 원한다면. NET 코드를 보여 주어야한다)
  • 값이있는 행과 행이없는 행에 대해 하나의 대량 작업을 수행하고 해당 열의 매핑을 제거하면 기본 제약 조건이 동작합니다
  • NULLS를 허용하도록 행을 다시 설정하고 일을 수행하면서 대량 작업을 수행하고 벌크 후에 NULLS를 기본값으로 설정하기 위해 업데이트를 수행합니다.

나는 BULK INSERTBCP 모두 NULL 값을 처리하기 위해 여기 에 표시된 것처럼 한정자를 가지고 있다는 것을 알고있다. 동일한 옵션은 .NET SqlBulkCopy 옵션 에서 사용할 수 있습니다 .

여기서 문제와 관련된 또 다른 질문입니다.

데이터베이스 스키마는 비즈니스 규칙을 적용하고 데이터를 깨끗하게 유지하는 데 도움이됩니다. 날짜가 NULL이 아니어야하는 경우 열을 NOT NULL로 유지하고 이에 따라 솔루션을 수행하십시오.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.