Simple Membership 데이터베이스를 Identity 2.0으로 마이그레이션하려고합니다. CreateDate datetime NULL
열을 CreateDate datetime NOT NULL
열로 복사하고 있습니다. 필자는 데이터 소스 테이블의 Membership.CreateDate 열에있는 모든 레코드를 검사하여 유효한 DateTimes가 있는지 확인했습니다. 이 오류가 반환됩니다T-SQL 'NULL 값이 아닌 값을 삽입 할 수 없습니다'오류가 발생했습니다.
Cannot insert the value NULL into column 'CreateDate', table 'Settlement.dbo.AspNetUsers'; column does not allow nulls. INSERT fails.
The statement has been terminated.
나는 또한 회원의 모든 기록을 삭제 시도했지만 하나 (의 CreateDate 열이 2012-12-27 01:35:03.610
을 포함). 같은 오류가 발생합니다.
저는 SSMS에서 스크립트를 실행하고 있습니다.
마이그레이션 스크립트 발췌 :
CREATE TABLE [dbo].[AspNetUsers] (
[Id] [nvarchar](60) NOT NULL,
[UserName] [nvarchar](15) NOT NULL,
[AcId] INT NOT NULL,
[LocId] INT NOT NULL,
[CreateDate] [datetime] NOT NULL,
[Email] [nvarchar](60),
[EmailConfirmed] [bit] Default ((0)) NOT NULL,
[PasswordHash] [nvarchar] (100),
[SecurityStamp] [nvarchar] (60),
[PhoneNumber] [nvarchar] (15),
[PhoneNumberConfirmed] [bit] Default ((0)) NOT NULL,
[TwoFactorEnabled] [bit] Default ((0)) NOT NULL,
[LockoutEndDateUtc] [datetime],
[LockoutEnabled] [bit] Default ((0)) NOT NULL,
[AccessFailedCount] [int] Default ((0)) NOT NULL,
CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY ([Id])
);
GO
INSERT INTO AspNetUsers(Id, UserName, AcId, LocId, PasswordHash, SecurityStamp, CreateDate)
SELECT UserProfile.UserId, UserProfile.UserName, UserProfile.BaId, UserProfile.OfcId,
webpages_Membership.Password, webpages_Membership.PasswordSalt, webpages_Membership.CreateDate
FROM UserProfile
LEFT OUTER JOIN webpages_Membership ON UserProfile.UserId = webpages_Membership.UserId
GO
나는 AspNetUsers CreateDate 열을 변경하는 경우
테이블에 성공적으로 테이블에서 복사 날짜 시간 그것을 NULL로 그래서 모든 열 이름과 유형이 올바른지 알고있다. 는 (이 일 후에 내가ALTER TABLE [dbo].[AspNetUsers] ALTER COLUMN [CreateDate] datetime NOT NULL
를 실행하고 같은 오류가있어)이 데이터베이스의 생산 사본과 함께 일어나고
합니다. 동일한 EF 코드 첫 번째 코드를 통해 생성 된 데이터베이스의 개발 복사본이 있고 CreateDate NOT NULL 필드에 데이터를 성공적으로 복사합니다.
나는이 시점에서 현명하다. 원본 데이터가 유효한 datetimes 일 때 Cannot insert the value NULL into column
오류가 발생하는 이유는 무엇입니까? 또는 CreateDate 열 데이터를 유효한 날짜 시간으로 인식하지 못하는 이유는 무엇입니까?
감사합니다. UserProfile에 고아 레코드가 추가로 있습니다. 스크립트를 삭제하면 스크립트가 작동합니다. 여분의 레코드를 삭제하지 않고 INNER JOIN도 작동했습니다. – Joe