Click here to Skip to main content
12,449,762 members (21,935 online)
Click here to Skip to main content
Add your own
alternative version

Stats

675.2K views
64.5K downloads
420 bookmarked
Posted

Convert SQL Server DB to SQLite DB

, 13 Jan 2013 Public Domain
Rate this:
Please Sign up or sign in to vote.
A C# utility to automatically do conversion from a SQL Server DB to a SQLite DB
convsqlservertosqlite/converter.png

Introduction

I needed to convert the existing SQL server databases to SQLite databases as part of a DB migration program and did not find any decent free converter to do the job.

This is my attempt to solve the problem. I should warn you though that I did not have much time to test it on too many databases. In any case - the source code is very well documented and easy to understand, so if you do have a problem it should be relatively easy to fix. (Please send me the fixed source code. If you do so, I can update the software so that everybody can enjoy it.)

Using the Code

The code is split between a dataaccess project (class library) that contains the conversion code itself and a converter project (WinForms) that drives the conversion code and provides a simple UI for user interaction.

The main class that performs the conversion is the sqlservertosqlite class. It does the conversion by doing the following steps:

  1. Reading the designated SQL server schema and preparing a list of tableschema objects that contain the schema for each and every SQL server table (and associated structures like indexes).
  2. Preparing an empty sqlite database file with the schema that was read from SQL server. In this step, the code may alter few SQL-server types that are not supported directly in sqlite.
  3. Copying rows for each table from the SQL server database to the sqlite database.

Basically, that's it!

Points of Interest

In order to read the SQL server DB schema, I was mainly using the pseudo information_schema.table table. You can find more information about it on the Internet if you want.

History

  • 13th June, 2008: Initial version
  • 08th July, 2008: v 1.2
    • Fixed a bug that caused unique indexes to be generated as non-unique in some cases
  • 08th July, 2008: v 1.3
    • Fixed a bug that caused the utility to crash sometimes when processing index information
  • 17th July, 2008: v 1.4
    • Fixed a bug that caused wrong columns to become primary keys on rare occasions and improved conversion performance
  • 20th July, 2008: v 1.5
    • Added support for case-insensitive columns (COLLATE NOCASE)
  • 22nd July, 2008: v 1.6
    • Added support for encrypting the resulting DB file (using the built-in encryption support that exists in the SQLite .NET provider)
  • 05th October, 2008: v 1.7
    • Fixed information_schema references to use UPPER-CASE in order to resolve international character set issues (Turkish)
  • 14th December 2008: v1.8
    • Integrated support for foreign keys from the revised version made by Yogesh Jagota
    • Merged support for selective table import
  • 21st February 2009: v1.9
    • Added contribution from johnny dickson cano that allows to select using SQL server integrated security or using user name /password instead
    • Added support for converting IDENTITY columns to AUTOINCREMENT in SQLite (suggestion by Paul Shaffer)
  • 04th March 2009: v1.10
    • Fixed a bug that caused the converter to crash when encountering a datetime field in the original SQL server schema. Thanks to bmcclint for sending me the bug with the correct bugfix.
  • 23rd May 2009: v1.11
    • Added support for simulating foreign keys using triggers (contributed by Martijn Muurman)
    • Added a small bugfix so that now an 'int' type is always converted to 'integer' type in sqlite. This was needed because sqlite will autoincrement only on 'integer' column types.
  • 04th June 2009: v1.12
    • Fixed a bug in trigger generation code that caused schema generation to fail when more than a single column is referencing the same column in a foreign table
  • 20th September 2009: v1.13
    • Fixed AUTOINCREMENT bug suggested by MAEP
    • Fixed 64 bit support problem (thanks to Murry Gammash)
    • Added support for converting SQL Server views (suggested by Richard Thurgood)
  • 22nd September 2009: v1.14
    • Fixed a critical bug that caused the conversion process to fail on some SQL Server databases that used the [dbo] notation.
  • 25th September 2009: v1.15
    • Fixed a critical bug that caused the primary keys to be discarded
    • Fixed trigger generation bug
  • 4th December 2009: v1.16
    • Fixed generation code to create GUID types for SQL-Server's uniqueidentifier type (instead of nvarchar as it was until now)
    • Updated the solution to use the latest SQLite .NET provider library
  • 24th March, 2011
    • Attached compiled version of the project for anyone that doesn't have Visual Studio and still needs to use the utility
  • 1st July, 2011
    • Updated binary zip as the earlier one was missing the DLL file needed by the application
  • 15th Nov 2011: v1.17
    • Fixed a bug that caused the software to crash when encountering NULL values in some of SQL Server meta data tables
  • 19th June 2012: v1.19
    • Added support for ignoring views when creating the DB schema, Added support for blank characters inside column names.
  •  14th January 2013: v1.20
    • Fixed problem with column names
    • Added more width to the database names combo box. 

License

This article, along with any associated source code and files, is licensed under A Public Domain dedication

Share

About the Author

liron.levi
Software Developer Arineta Cardio Imaging
Israel Israel
My name is Liron Levi and I'm developing software for fun & profit for 15 years already. I'm now working for Arineta Cardio Imaging as a software developer (the company develops a CT machine).

I can be contacted directly at liron.levi@outlook.com or via linkedin at http://www.linkedin.com/pub/liron-levy/1/578/ab5

You may also be interested in...

Pro
Pro

Comments and Discussions

 
Suggestiondatetime field default value Pin
Member 1249538816-Jun-16 20:42
memberMember 1249538816-Jun-16 20:42 
QuestionMove to github? Pin
Member 1230094926-May-16 16:37
memberMember 1230094926-May-16 16:37 
GeneralRe: Move to github? Pin
PIEBALDconsult26-May-16 17:11
protectorPIEBALDconsult26-May-16 17:11 
GeneralRe: Move to github? Pin
Member 1230094929-May-16 15:16
memberMember 1230094929-May-16 15:16 
GeneralRe: Move to github? Pin
PIEBALDconsult29-May-16 15:32
protectorPIEBALDconsult29-May-16 15:32 
GeneralRe: Move to github? Pin
Member 1230094929-May-16 15:38
memberMember 1230094929-May-16 15:38 
QuestionForeign Keys /Performance Pin
Member 118195759-May-16 7:56
memberMember 118195759-May-16 7:56 
AnswerRe: Foreign Keys /Performance Pin
bmasephol12-May-16 10:46
memberbmasephol12-May-16 10:46 
AnswerRe: Foreign Keys /Performance Pin
Member 123009496-Jun-16 23:50
memberMember 123009496-Jun-16 23:50 
Questionproblem with converted db Pin
Member 117578427-May-16 3:37
memberMember 117578427-May-16 3:37 
BugError Pin
jayveebishie2-May-16 23:46
memberjayveebishie2-May-16 23:46 
QuestionI want to convert sqlserver script to Sqlite script Pin
Member 787310327-Apr-16 8:06
memberMember 787310327-Apr-16 8:06 
PraiseUnbelievable. Great! Pin
Member 1199679318-Apr-16 8:53
memberMember 1199679318-Apr-16 8:53 
Questionthe software Pin
abbasnafiu16-Jan-16 8:45
memberabbasnafiu16-Jan-16 8:45 
QuestionEasy to use ! Pin
tidur10-Dec-15 19:58
membertidur10-Dec-15 19:58 
PraiseJust what I needed Pin
Vivid Digital9-Dec-15 12:24
memberVivid Digital9-Dec-15 12:24 
GeneralMy vote of 5 Pin
Renga Raj5-Nov-15 17:50
professionalRenga Raj5-Nov-15 17:50 
QuestionHow can I get the Live data from SQL server to SQLite? Pin
priyahp27-Oct-15 18:45
memberpriyahp27-Oct-15 18:45 
GeneralMade changes so that it can add data only without recreating the database Pin
Ricardo Pineda17-Oct-15 5:59
memberRicardo Pineda17-Oct-15 5:59 
GeneralMy vote of 5 Pin
allkf15-Sep-15 16:20
memberallkf15-Sep-15 16:20 
QuestionHow I may transfer selected records from table Pin
Member 1060244030-Jun-15 17:48
memberMember 1060244030-Jun-15 17:48 
QuestionWhy do we need conversion to SQLite when it doesn't support stored procedures instead bind it to SQL Server through Linked Server option and follow the steps mentioned in the below links? Pin
Venkat Chaitanya Kanumukula15-Jun-15 8:48
memberVenkat Chaitanya Kanumukula15-Jun-15 8:48 
GeneralMy vote of 5 Pin
Member 1164517027-Apr-15 1:40
memberMember 1164517027-Apr-15 1:40 
QuestionProblems with data types Pin
Member 1163138223-Apr-15 8:19
memberMember 1163138223-Apr-15 8:19 
Generalthanks Pin
Vahid Hossein Pour21-Apr-15 5:10
memberVahid Hossein Pour21-Apr-15 5:10 
GeneralMy vote of 5 Pin
8838813220-Apr-15 2:43
professional8838813220-Apr-15 2:43 
SuggestionAdd encoding option? Pin
Chartres2-Apr-15 3:32
memberChartres2-Apr-15 3:32 
Questionhow i will use this source code ,can you please explain Pin
Member 1131126227-Mar-15 1:21
memberMember 1131126227-Mar-15 1:21 
Questionnice tools Pin
pigbbong616-Mar-15 21:54
memberpigbbong616-Mar-15 21:54 
QuestionHierarchy Pin
Member 1144083217-Feb-15 22:35
memberMember 1144083217-Feb-15 22:35 
AnswerRe: Hierarchy Pin
liron.levi21-Feb-15 22:44
memberliron.levi21-Feb-15 22:44 
Questionvery useful one Pin
Member 1145359115-Feb-15 20:18
memberMember 1145359115-Feb-15 20:18 
QuestionExcellent job... On the other hand, I change one line to fix a bug related with Primary Key of tables with no dbo schema Pin
camilot195-Jan-15 19:32
membercamilot195-Jan-15 19:32 
QuestionView convert issues Pin
Oleksandr Kucherenko11-Dec-14 23:18
memberOleksandr Kucherenko11-Dec-14 23:18 
QuestionConcern Entity Framework Pin
Member 110555179-Nov-14 23:29
memberMember 110555179-Nov-14 23:29 
GeneralMy vote of 5 Pin
Maniezzo3-Nov-14 2:31
memberManiezzo3-Nov-14 2:31 
QuestionGood 5star Pin
CoffeeShop31-Oct-14 18:05
memberCoffeeShop31-Oct-14 18:05 
QuestionGOOOOOD Pin
Member 1095699316-Oct-14 20:27
memberMember 1095699316-Oct-14 20:27 
QuestionMultiple Foreign Keys Messed Up Pin
A.Russell14-Oct-14 2:42
memberA.Russell14-Oct-14 2:42 
AnswerRe: Multiple Foreign Keys Messed Up Pin
liron.levi14-Oct-14 7:13
memberliron.levi14-Oct-14 7:13 
QuestionImage Data Type conversion to BLOB Pin
Chandy@12329-Sep-14 1:56
memberChandy@12329-Sep-14 1:56 
Questionpossible to convert a sql server compact db? Pin
Rael Bauer10-Sep-14 23:53
memberRael Bauer10-Sep-14 23:53 
AnswerRe: possible to convert a sql server compact db? Pin
liron.levi11-Sep-14 2:09
memberliron.levi11-Sep-14 2:09 
QuestionConvert SQL Server DB to SQLite DB Pin
PeymanFx9-Sep-14 0:54
memberPeymanFx9-Sep-14 0:54 
GeneralNice Pin
Amol M Vaidya28-Aug-14 16:15
professionalAmol M Vaidya28-Aug-14 16:15 
QuestionTnx very much Pin
Member 454708710-Aug-14 5:25
memberMember 454708710-Aug-14 5:25 
Questionconverter is not working Pin
Member 1094752815-Jul-14 1:19
memberMember 1094752815-Jul-14 1:19 
AnswerRe: converter is not working Pin
liron.levi15-Jul-14 2:05
memberliron.levi15-Jul-14 2:05 
QuestionHaving problem in conversion from Sql express 2005 to sqlite Pin
Rahul saraswat24-Jun-14 19:26
memberRahul saraswat24-Jun-14 19:26 
GeneralNice Work Pin
wh_ghost19-Jun-14 0:50
memberwh_ghost19-Jun-14 0:50 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.160826.1 | Last Updated 14 Jan 2013
Article Copyright 2008 by liron.levi
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid