2011-11-26 6 views
0

테이블 순서 목록을 얻으려면 어떻게해야합니까?C#/SQL Server - 테이블 순서 결정

나는 두 개의 데이터베이스 (동일한 스키마)를 가지고 있으며 첫 번째 데이터베이스에서 두 번째 데이터베이스로 데이터를 가져 오려고합니다.

하지만 이제 제약 조건이 있습니다. 그래서 테이블을 삽입하기 전에 주문해야합니다. 예를 들어

public static void SQLUpdate(DataSet ds) 
{ 
    foreach (DataTable table in ds.Tables) 
    { 
     string TableName = table.TableName; 
     DataTable CurrentDt = clsDatabase.SQLQuery("SELECT * FROM " + TableName); 

     SqlDataAdapter da = new SqlDataAdapter("Select * FROM " + TableName, con); 
     SqlCommandBuilder cb = new SqlCommandBuilder(da); 

     foreach (DataRow row in table.Rows) 
     { 
     DataRow[] drs = CurrentDt.Select(String.Format("[ID] = '{0}'", row["ID"].ToString())); 

     // No entry? INSERT! 
     if (drs == null || drs.Length == 0) 
     { 
      da.InsertCommand = cb.GetInsertCommand(); 
      da.Update(new DataRow[] { row }); 
     } 
     // Entry? UPDATE! 
     else if (drs.Length == 1) 
     { 
      da.UpdateCommand = cb.GetUpdateCommand(); 
      da.UpdateCommand.CommandText += " WHERE ID = @ID"; 
      da.Update(drs); 
     } 
     } 
    } 
} 

: 두 개의 테이블 :

PERSON : ID, Name, AdressID

ADRESS : ID, Town

Person.ID = 1, Person.Name = "John Doe", Person.AdressID = 1 

Adress.ID = 1, Adress.Town = "Downtown" 

첫 번째 데이터베이스의 행입니다 그건 내 C# 코드입니다 . 내 코드로 두 번째 데이터베이스에서 가져 오려고합니다.

주소가 첫 번째 삽입이어야하며 외래 키가 발생해야합니다. 그런 다음 사람을 가져올 수 있습니다.

이제 테이블 순서 목록이 필요합니다. Person 앞에 Address을 가져와야합니다.

+1

이 "순서를" 여기서 다루는 것은 실제로 ** 시맨틱 ** 일입니다 - ** 당신은 ** 데이터 소유자로서 그것을 알고 있습니다. 나는 이것을 쉽게 발견 할 수있는 방법이 없다. 그래서 기본적으로 올바른 순서가 존중되는 방식으로 코드를 작성하는 것입니다 ** - ADO.NET에서 설정할 수있는 "설정"또는 ADO.NET의 기능이 없습니다. 이 일을 너에게해라. –

+0

그러나 외래 키가 정의 된 테이블간에 종속성이 무엇인지 결정할 수있는 단계가 있습니다. 솔리드 비트 일 가능성이 높습니다. 문제는 자동 생성 된 키 값을 처리합니다. – Murph

답변

0

제약 조건을 "지연"으로 설정해야합니다. 따라서 모든 업데이트가 아닌 커밋시 검사됩니다.

+0

SQL Server에 지연 제약 조건이 없습니다. –

+0

음, 그렇지만 제약 조건은 [이 질문] (http://stackoverflow.com/questions/159038/can-foreign-key-constraints-be-temporarily-disabled-using-t-sql) 에서처럼 일시적으로 비활성화 할 수 있습니다.) –