2008-10-02 116 views

回答

19

SQLite确实有使用.dump选项,在命令行中运行。尽管我更喜欢使用SQLite Database Browser应用程序来管理SQLite数据库。你可以将结构和内容导出到一个.sql文件,它可以被任何东西读取。文件>导出>数据库到SQL文件。

+1

导出的文件确实需要对语法差异进行一些调整,但不要太复杂。谢谢 – 2008-10-02 16:09:53

+1

从技术上讲,SQLite shell不是SQLite,而是连接到SQLite的控制台应用程序,它只是一个库。 – Benoit 2011-01-25 17:04:06

+1

这指出我在正确的方向,但我正在寻找的语法,所以我会在这里包括它:`sqlite3 my_db.db -batch“.dump”> my_db.sql` – 2017-04-02 16:59:23

6

SQLite的.dump命令将输出数据库中作为一个ASCII文本文件的全部内容。该文件采用标准的SQL格式,因此可以导入到任何SQL数据库中。 此页面上的更多细节:sqlite3

0

我使用SQLite管理器,Firefox插件 但FK没有在SQL Server中工作,我有一个 我有超过100台有许多FK修改脚本的.. 有没有新的解决办法 感谢

7

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

  • 安装ODBC驱动程序的SQLite
  • 针对x64或C
  • 运行odbcad32:\ WINDOWS \ Syswow64资料\ odbcad32.exe的用于x86
  • 创建系统DSN,在那里你选择SQLite3的ODBC驱动程序
  • 然后您填写高达形式,其中数据库名称是文件路径到SQLite数据库

然后在SQL Server下的系统管理员运行

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') 

或者你可以使用类似this的东西来做大表。

0

一个想法是做一些这样的事情: - 在SQL精简版浏览squema并得到CREATE TABLE命令。 - 在SQL SERVER中执行,解析sql - 旅行数据为每一行创建一个INSERT语句。 (也解析sql)

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

(你需要插入参考,并安装System.Data.SQLite;)

C#: 插入代码(或neccesari)头CS

使用系统;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.Data.SqlClient;

using System.Data.SQLite;

using System.Threading;

using System.Text.RegularExpressions;

using System.IO;

使用log4net;

using 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 
    }