SQLite 데이터베이스를 사용하는 응용 프로그램이 있으며 모든 것이 정상적으로 작동합니다. 이제 두 번째 SQLite 데이터베이스가 필요한 새로운 기능을 추가하는 과정에 있지만 다른 데이터베이스의 테이블을 조인하는 방법을 파악하는 데 어려움을 겪고 있습니다.
누군가가 이걸로 나를 도울 수 있다면 정말 감사하겠습니다!
편집 : 수락 된 답변에 언급 된대로 데이터베이스를 연결할 때 언어에 적응할 수있는 예제 사례는 이 질문 을 참조하십시오 .
답변
Sqlite 빌드에서 ATTACH 가 활성화 된 경우 ( 대부분의 빌드에 있어야 함 ) ATTACH 키워드를 사용하여 현재 연결에 다른 데이터베이스 파일을 연결할 수 있습니다 . 부착 할 수 데시벨의의의 수에 제한은 컴파일 시간 설정 (이다 SQLITE_MAX_ATTACHED ), 10 현재 기본값으로, 그러나 이것은 너무 당신이 빌드에 따라 다를 수 있습니다. 글로벌 제한은 125입니다.
attach 'database1.db' as db1;
attach 'database2.db' as db2;
키워드로 연결된 모든 데이터베이스를 볼 수 있습니다.
.databases
그러면 다음을 수행 할 수 있습니다.
select
*
from
db1.SomeTable a
inner join
db2.SomeTable b on b.SomeColumn = a.SomeColumn;
참고 “[t] 그가 데이터베이스 이름 그 main
와 temp
임시 테이블 및 기타 임시 데이터 오브젝트를 보유 할 기본 데이터베이스 및 데이터베이스 위해 예약되어 있습니다. 이러한 데이터베이스 이름 모두가 모든 데이터베이스 연결을 위해 존재하고 첨부 파일에 사용되어서는 안된다.”
답변
이 질문을 완료하는 C # 예제는 다음과 같습니다.
/// <summary>
/// attachSQL = attach 'C:\\WOI\\Daily SQL\\Attak.sqlite' as db1 */
/// path = "Path of the sqlite database file
/// sqlQuery = @"Select A.SNo,A.MsgDate,A.ErrName,B.SNo as BSNo,B.Err as ErrAtB from Table1 as A
/// inner join db1.Labamba as B on
/// A.ErrName = B.Err";
/// </summary>
/// <param name="attachSQL"></param>
/// <param name="sqlQuery"></param>
public static DataTable GetDataTableFrom2DBFiles(string attachSQL, string sqlQuery)
{
try
{
string conArtistName = "data source=" + path + ";";
using (SQLiteConnection singleConnectionFor2DBFiles = new SQLiteConnection(conArtistName))
{
singleConnectionFor2DBFiles.Open();
using (SQLiteCommand AttachCommand = new SQLiteCommand(attachSQL, singleConnectionFor2DBFiles))
{
AttachCommand.ExecuteNonQuery();
using (SQLiteCommand SelectQueryCommand = new SQLiteCommand(sqlQuery, singleConnectionFor2DBFiles))
{
using (DataTable dt = new DataTable())
{
using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(SelectQueryCommand))
{
adapter.AcceptChangesDuringFill = true;
adapter.Fill(dt);
return dt;
}
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("Use Process Exception method An error occurred");
return null;
}
}
답변
글쎄, 나는 SQLite에 대한 경험이 많지 않으므로 단일 쿼리로 두 데이터베이스에 액세스해야합니다.
다음과 같은 것을 가질 수 있습니다.
select name from DB1.table1 as a join DB2.table2 as b where a.age = b.age;
SQLServer와 같은 데이터베이스에서는 이러한 계층 적 방식으로 다른 데이터베이스에 액세스 할 수 있으며 SQLite에서도 작동합니다.
1 개 이상의 데이터베이스로 sqlite 인스턴스를 시작할 수 있다고 생각합니다!