代码之家  ›  专栏  ›  技术社区  ›  Bassie

尝试运行从db browser for sqlite导出的SQL时出现恼人的错误

  •  0
  • Bassie  · 技术社区  · 6 年前

    我只是想运行一个基本的SQL脚本来重新创建一个数据库。

    数据库最初是在SQLite中创建的,我使用DB Browser for SQLite导出了它。

    文件的开头如下所示:

    BEGIN TRANSACTION;
    
    CREATE TABLE "AspNetUsers" 
    (
        `Id`    varchar(128) NOT NULL,
        `Email` varchar(256) DEFAULT NULL,
        `EmailConfirmed`    tinyint(1) NOT NULL,
        `PasswordHash`  longtext,
        `SecurityStamp` longtext,
        `PhoneNumber`   longtext,
        `PhoneNumberConfirmed`  tinyint(1) NOT NULL,
        `TwoFactorEnabled`  tinyint(1) NOT NULL,
        `LockoutEndDateUtc` datetime DEFAULT NULL,
        `LockoutEnabled`    tinyint(1) NOT NULL,
        `AccessFailedCount` int(11) NOT NULL,
        `UserName`  varchar(256) NOT NULL,
        `IsActivated`   tinyint(1) NOT NULL DEFAULT (0),
        `Organisation`  TEXT NOT NULL,
        PRIMARY KEY(`Id`)
    );
    

    我创建了一个新的数据库,当在SSMS中运行查询时,我得到了这个恼人的错误

    消息102,级别15,状态1,行3
    “`”附近的语法不正确。

    我试着删除第一个 ( 'Id' 但后来我

    消息102,级别15,状态1,行2
    “`”附近的语法不正确。

    我很确定我试图在其上执行此操作的服务器运行的是SQL server Express,不确定这是否有区别

    1 回复  |  直到 6 年前
        1
  •  0
  •   Gordon Linoff    6 年前

    该代码在几个方面对SQLite相当特殊:

    • 具有非标准整数列的长度。
    • text longtext 都是非标准的。

    等价物 create table SQL Server中的语句为:

    CREATE TABLE AspNetUsers (
        Id varchar(128) NOT NULL,
        Email varchar(256) DEFAULT NULL,
        EmailConfirmed tinyint NOT NULL,
        PasswordHash varchar(max),
        SecurityStamp varchar(max),
        PhoneNumber varchar(max),
        PhoneNumberConfirmed  tinyint NOT NULL,
        TwoFactorEnabled  tinyint NOT NULL,
        LockoutEndDateUtc datetime DEFAULT NULL,
        LockoutEnabled tinyint NOT NULL,
        AccessFailedCount int NOT NULL,
        UserName  varchar(256) NOT NULL,
        IsActivated   tinyint NOT NULL DEFAULT (0),
        Organisation  varchar(max) NOT NULL,
        PRIMARY KEY (Id)
    );
    

    除了 varchar(max) ,这对于任何数据库都是非常标准的。

    一些注释:

    • 你可能不需要 任何一个领域。虽然你可以使用它,但拥有一个可能占用兆字节数据的电话号码看起来很尴尬。
    • tinyint s与 bit s。
    • DEFAULT NULL 是多余的。
    推荐文章