有没有一个工具可以迁移 SQLite 数据库到 SQL服务器 (结构和数据)?

有帮助吗?

解决方案

SQLite 确实有一个.dump选项可以在命令行运行。虽然我更喜欢使用 SQLite数据库浏览器应用程序来管理SQLite数据库。您可以将结构和内容导出到几乎可以读取的.sql文件中。文件>出口>数据库到SQL文件。

其他提示

我知道这是旧线程,但我认为这个解决方案也应该在这里。

  • 安装 SQLite 的 ODBC 驱动程序
  • 对于 x64 运行 odbcad32 或对于 x86 运行 C:\Windows\SysWOW64\odbcad32.exe
  • 创建SYSTEM DSN,其中选择SQLite3 ODBC Driver
  • 然后填写表格,其中数据库名称是 sqlite 数据库的文件路径

然后在SQL Server中在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

然后,您可以以普通用户身份运行查询 例如

SELECT * INTO SQLServerDATA FROM openquery(SQLiteDNSName, 'select * from SQLiteData')

或者你可以使用类似的东西 对于更大的桌子。

SQLite .dump 命令将输出数据库的全部内容作为ASCII文本文件。此文件采用标准SQL格式,因此可以导入任何SQL数据库。 有关此页面的更多详细信息: sqlite3

sqlite-manager ,firefox附加组件:允许您在SQL脚本中导出SQLite数据库。

数据库>导出数据库>导出到文件

(更正firefox 35 bugg有义务更正扩展代码,如以下网页所示: 如何修复可选的sqlite管理器模块

命令行

sqlite3 DB_name .dump > DB_name.sql

在SQL脚本中导出sqlite数据库。

来自网址:

一个想法是做这样的事情: - 在sql lite中查看squema并获取CREATE TABLE命令。 - 在SQL SERVER中执行,解析sql - 旅行数据为每行创建INSERT语句。 (也解析sql)

这段代码是测试版,因为没有检测类型数据,也没有使用@parameter和命令对象,但是运行。

(您需要插入引用并安装System.Data.SQLite;)

C#: 在head cs中插入此代码(或neccesari)

使用System;

使用System.Collections.Generic;

使用System.Text;

使用System.Data;

使用System.Data.SqlClient;

使用System.Data.SQLite;

使用System.Threading;

使用System.Text.RegularExpressions;

使用System.IO;

使用log4net;

使用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
    }

对于Android。

adb root
adb shell
cd /data/com.xxx.package/databases/
sqlite3 db_name .dump >dump.sql
scroll top