2011-04-06 3 views
4

두 개의 ASP.NET 멤버십 데이터베이스를 관련된 역할 및 프로필 테이블과 병합해야합니다. 두 데이터베이스 모두 동일한 역할과 프로필 구조를 가지고 있습니다. 그들은 내장 된 공급자 (SqlMembershipProvider 및 friends)를 사용합니다. 중복이 가능합니다.두 ASP.NET 멤버쉽 데이터베이스 병합

나를위한 권장 사항이 있으십니까? 이 작업을 수행 할 수있는 도구가 있습니까? 그렇지 않은 경우 : 회원 API 사용을 권장 할 수 있습니까? 아니면 SQL을 사용하는 것이 더 쉽습니다.

업데이트 여기

내가 마지막으로 회원 데이터를 전송하는 데 사용되는 스크립트입니다.

insert into targetMembershipDatabase.dbo.aspnet_users 
select * from sourceMembershipDatabase.dbo.aspnet_users 
where username not in (select username from targetMembershipDatabase.dbo.aspnet_users) 

insert into targetMembershipDatabase.dbo.aspnet_membership 
select * from sourceMembershipDatabase.dbo.aspnet_membership 
where userid in (select userid from targetMembershipDatabase.dbo.aspnet_users) 
and not userid in (select userid from targetMembershipDatabase.dbo.aspnet_membership) 

insert into targetMembershipDatabase.dbo.aspnet_profile 
select * from sourceMembershipDatabase.dbo.aspnet_profile 
where userid in (select userid from targetMembershipDatabase.dbo.aspnet_users) 
and not userid in (select userid from targetMembershipDatabase.dbo.aspnet_profile) 

insert into targetMembershipDatabase.dbo.aspnet_usersinroles 
select * from sourceMembershipDatabase.dbo.aspnet_usersinroles 
where userid in (select userid from targetMembershipDatabase.dbo.aspnet_users) 
and not userid in (select userid from targetMembershipDatabase.dbo.aspnet_usersinroles) 

제공하는 그대로입니다. 중복 된 전자 메일은 확인하지 않습니다. 더 복잡한 시나리오에서 이것이 작동한다는 보증은 없습니다.

답변

2

이 작업을 수행 할 도구는 알지 못하지만 스키마는 매우 간단하므로 SQL로 처리하는 것이 간단합니다. 어쨌든 모든 키는 GUID이므로 아무 문제가 없어야합니다.

고유 이메일 주소 규칙이 적용되는 경우 분명히 중복 및 이메일 주소에 대해 user_name 필드를 확인해야합니다. 그러나 두 데이터베이스에서 역할이 동일하다면 사용자가 정말로 관심있는 것이 전부입니다. 문제가 해결되면 RoleIdApplicationIdaspnet_Usersaspnet_UsersInRoles으로 업데이트하는 경우 일 수 있습니다.

+0

당신이 말한 것처럼 쉽습니다. 간단한 T-SQL 스크립트를 넘어선 도구가 필요 없습니다. :-) –

+0

@Dirk는 그러한 T-SQL 스크립트를 제공 할 수 있습니까? –

+0

@Akil Vhora : 내 질문에 대한 업데이트로 스크립트를 추가했습니다. –

0

현재 세 가지 응용 프로그램에 대해 단일 데이터베이스를 사용하고 있습니다. 그들 각각은 자신의 ApplicationID을 가지고 있으며,이 2 년 동안 나와 함께 특별한 일이 없습니다. 유사한 메일도 사용할 수 있습니다 (SQL은 ApplicationID을 확인하고 각 응용 프로그램에는 하나의 메일 만 있기 때문에) 특별한 것을 고려해야한다고 생각하지 않습니다.

그냥 데이터에서 스크립트를 만들고 바로 mainDatabase에서 실행하십시오. 테이블의 스키마를 대체하지 않습니다.