2014-05-20 2 views
0

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 열 데이터를 유효한 날짜 시간으로 인식하지 못하는 이유는 무엇입니까?

답변

1

UserProfile에있는 일부 사용자가 webpages_Membership에 해당 사용자가 없으므로 정보없이 사용자를 삽입하려고합니다. LEFT OUTER JOIN 대신 INNER JOIN을 사용하거나 해당 정보가없는 사용자의 기본값을 제공해야합니다.

+0

감사합니다. UserProfile에 고아 레코드가 추가로 있습니다. 스크립트를 삭제하면 스크립트가 작동합니다. 여분의 레코드를 삭제하지 않고 INNER JOIN도 작동했습니다. – Joe