Esportazione da SQLite a SQL Server
-
03-07-2019 - |
Domanda
Esiste uno strumento per migrare un SQLite su SQL Server (sia la struttura che i dati)?
Soluzione
SQLite ha un'opzione .dump da eseguire dalla riga di comando. Tuttavia, preferisco utilizzare l'applicazione SQLite Database Browser per la gestione dei database SQLite. Puoi esportare la struttura e i contenuti in un file .sql che può essere letto praticamente da qualsiasi cosa. File > Esporta > Database su file SQL.
Altri suggerimenti
So che questo è il vecchio thread, ma penso che questa soluzione dovrebbe essere anche qui.
- Installa il driver ODBC per SQLite
- Esegui odbcad32 per x64 o C: \ Windows \ SysWOW64 \ odbcad32.exe per x86
- Crea DSN DI SISTEMA, dove selezioni Driver ODBC SQLite3
- Quindi si compila il modulo in cui Nome database è percorso del file al database sqlite
Quindi, in SQL Server, esegui in sysadmin
USE [master]
GO
EXEC sp_addlinkedserver
@server = 'OldSQLite', -- connection name
@srvproduct = '', -- Can be blank but not NULL
@provider = 'MSDASQL',
@datasrc = 'SQLiteDNSName' -- name of the system DSN connection
GO
Quindi puoi eseguire le tue query come utente normale per es.
SELECT * INTO SQLServerDATA FROM openquery(SQLiteDNSName, 'select * from SQLiteData')
oppure puoi usare qualcosa come questo per tavoli più grandi.
Il comando SQLite .dump
genererà l'intero contenuto del database come file di testo ASCII. Questo file è in formato SQL standard, quindi può essere importato in qualsiasi database SQL.
Maggiori dettagli in questa pagina: sqlite3
sqlite-manager , componente aggiuntivo firefox: consente di esportare un database SQLite in uno script SQL.
Base di dati > Esporta database > Esporta in file
(Correzione firefox 35 bugg obbligato a correggere il codice di estensione come indicato alla seguente pagina Web: Come risolvere il modulo del gestore sqlite opzionale in modo che funzioni )
Riga di comando :
sqlite3 DB_name .dump > DB_name.sql
esporta il database sqlite in uno script SQL.
Dall'URL: http: //doc.ubuntu- fr.org/sqlite.
Un'idea è fare qualcosa del genere: - Visualizza squema in sql lite e ottieni il comando CREATE TABLE. - Eseguire, analizzando sql, in SQL SERVER - Dati di viaggio che creano una dichiarazione INSERT per ogni riga. (analizzando anche sql)
Questo codice è beta, perché non rileva dati di tipo e non utilizza @parameter e l'oggetto comando, ma viene eseguito.
(È necessario inserire riferimento e installare System.Data.SQLite;)
c #: Inserisci questo codice (o neccesari) in head cs
utilizzando il sistema;
utilizzando System.Collections.Generic;
utilizzando System.Text;
utilizzando System.Data;
utilizzando System.Data.SqlClient;
utilizzando System.Data.SQLite;
utilizzando System.Threading;
utilizzando System.Text.RegularExpressions;
utilizzando System.IO;
utilizzando log4net;
utilizzando System.Net;
public static Boolean SqLite2SqlServer(string sqlitePath, string connStringSqlServer)
{
String SqlInsert;
int i;
try
{
string sql = "select * from sqlite_master where type = 'table' and name like 'YouTable in SQL'";
string password = null;
string sql2run;
string tabla;
string sqliteConnString = CreateSQLiteConnectionString(sqlitePath, password);
//sqliteConnString = "data source=C:\\pro\\testconverter\\Origen\\FACTUNETWEB.DB;page size=4096;useutf16encoding=True";
using (SQLiteConnection sqconn = new SQLiteConnection(sqliteConnString))
{
sqconn.Open();
SQLiteCommand command = new SQLiteCommand(sql, sqconn);
SQLiteDataReader reader = command.ExecuteReader();
SqlConnection conn = new SqlConnection(connStringSqlServer);
conn.Open();
while (reader.Read())
{
//Console.WriteLine("Name: " + reader["name"] + "\tScore: " + reader["score"]);
sql2run = "" + reader["sql"];
tabla = "" + reader["name"];
/*
sql2run = "Drop table " + tabla;
SqlCommand cmd = new SqlCommand(sql2run, conn);
cmd.ExecuteNonQuery();
*/
sql2run = sql2run.Replace("COLLATE NOCASE", "");
sql2run = sql2run.Replace(" NUM", " TEXT");
SqlCommand cmd2 = new SqlCommand(sql2run, conn);
cmd2.ExecuteNonQuery();
// insertar los datos.
string sqlCmd = "Select * From " + tabla;
SQLiteCommand cmd = new SQLiteCommand(sqlCmd, sqconn);
SQLiteDataReader rs = cmd.ExecuteReader();
String valor = "";
String Valores = "";
String Campos = "";
String Campo = "";
while (rs.Read())
{
SqlInsert = "INSERT INTO " + tabla;
Campos = "";
Valores = "";
for ( i = 0; i < rs.FieldCount ; i++)
{
//valor = "" + rs.GetString(i);
//valor = "" + rs.GetName(i);
Campo = "" + rs.GetName(i);
valor = "" + rs.GetValue(i);
if (Valores != "")
{
Valores = Valores + ',';
Campos = Campos + ',';
}
Valores = Valores + "'" + valor + "'";
Campos = Campos + Campo;
}
SqlInsert = SqlInsert + "(" + Campos + ") Values (" + Valores + ")";
SqlCommand cmdInsert = new SqlCommand(SqlInsert, conn);
cmdInsert.ExecuteNonQuery();
}
}
}
return true;
} //END TRY
catch (Exception ex)
{
_log.Error("unexpected exception", ex);
throw;
} // catch
}
Per Android.
adb root
adb shell
cd /data/com.xxx.package/databases/
sqlite3 db_name .dump >dump.sql