2010-04-01 2 views
0

배경이 너무 오래되었습니다.SQLite에서 여러 개의 관련 테이블 업데이트

System.Data.SQLite ADO.net 어댑터를 사용하여 로컬 sqlite 데이터베이스를 만들고 있는데이 데이터베이스가 유일한 프로세스이므로 동시성에 대해 걱정할 필요가 없습니다.

다양한 소스에서 데이터베이스를 구축 중이며 데이터 세트 나 데이터 어댑터 등을 사용하여 메모리에이 모든 것을 구축하고 싶지는 않습니다. SQL (DdCommands)을 사용하여이 작업을 수행하려고합니다. 나는 SQL에 익숙하지 않고 sqlite에 noob을 완성한다. 나는 기본적으로 로컬 데이터베이스/파일 구조를 저장 sqlite를 사용하고 있습니다.

데이터베이스는 관련 테이블을 많이 가지고 데이터는 사람들이나 지역 또는 지구와는하지만, 간단한 비유를 사용하여 아무 상관이 상상 :

지역 테이블을 자동 증가 RegionID, RegionName이 열 및 다양한 함께 선택적 열. 자동 증가 DistrictID, DistrictName, RegionId, 다양한 옵션 열

지구 테이블 자동 증가 PersonID,으로 PersonName, DistrictID하고, 그래서 일부 데이터가 RegionName이를 나타내는 얻을 다양한 옵션 열

Person 테이블, DistrictName, PersonName 및 기타 Person 관련 데이터. 지역, 지구 및/또는 사람은이 시점에서 생성되거나 생성되지 않을 수 있습니다.

다시 한번이 가진 가장 큰이되지 않는, 내 생각은 같은 것입니다 : 지역이 존재하고 있는지

  • 확인 그래서 RegionID 다른
  • 을 만들고 RegionID
  • 를 얻을 수를 얻는 경우
  • District가 존재하는지 확인하고 DistrictID를 얻으 려한다면
  • 다른 사람이 위에서 작성한 RegionID를 추가하고 DistrictID를 얻으십시오.
  • Person이 존재하는지 확인하고 PersonID가 있는지 확인하십시오.
  • 다른 사람을 위에서 작성한 DistrictID에 추가하고 PersonID를 얻으십시오.
  • 나머지 사람이있는 사람을 업데이트하십시오.

MS SQL Server에서는이 모든 것을 처리하기 위해 저장 프로 시저를 만들 것입니다.

나는 sqlite로 이것을 할 수있는 유일한 방법은 많은 명령이다. 그래서 나는 이것을 얻지 못할 것이라고 확신합니다. 나는 여러 사이트에서 주변을 둘러 보았지만 옳은 길로 내려가는 것 같지 않습니다. 어떤 제안이라도 대단히 감사하겠습니다.

답변

2

INSERT OR REPLACE과 함께 last_insert_rowid()을 사용하십시오. 다음과 같이 입력하십시오 :

INSERT OR REPLACE INTO Region (RegionName) 
         VALUES (:Region ); 

INSERT OR REPLACE INTO District(DistrictName, RegionID   ) 
         VALUES (:District , last_insert_rowid()); 

INSERT OR REPLACE INTO Person(PersonName, DistrictID   ) 
         VALUES (:Person , last_insert_rowid()); 
+0

나는 그것을 시도 할 것이다. 감사! – PerryJ

+0

답변을 읽었을 때 의미가 있었지만 지금은 코드에서 시도 중임을 예상하지 못했습니다. 가깝지만 여전히 제대로 작동하지는 않습니다. 예를 들어 District 테이블에서 DistrictID와 RegionID는 Region 테이블의 RegionID와 실제로 일치하는 RegionID 대신 각 행에 대해 동일한 값을 갖습니다. Person 테이블에있는 것과 같은 종류의 것. 또한 모든 충돌로 인해 기본 키가 변경되는 것처럼 보입니다. 다른 테이블이 기본 키를 가리키고있는 경우 어떻게하면 좋을지 알 수 없습니다. – PerryJ

+0

여기에 설명 된 내용이 끝났습니다. http://probertson.com/articles/2009/11/30/multi-table-insert-one-statement-air-sqlite/ – PerryJ

관련 문제