尝试为SQLite运行从数据库浏览器导出的SQL时出现的烦人的错误

时间:2018-10-20 08:41:42

标签: sql sqlite sql-server-express db-browser-sqlite

我只是试图运行基本的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中运行查询时,出现此烦人的错误

  

第15级状态1行3的消息102
  '`'附近的语法不正确。

我尝试删除第一个('Id'之间的所有空格,但随后我得到了

  

第15层状态1,第2行,Msg 102
  '`'附近的语法不正确。

我还尝试将s替换为,但结果相同。...

我很确定要在其上执行此操作的服务器正在运行SQL Server Express-不知道这是否有所不同

为什么生活如此艰难?

1 个答案:

答案 0 :(得分:0)

该代码在几个方面非常特定于SQLite:

  • 反引号的使用是非标准的。
  • 具有非标准整数列的长度。
  • textlongtext是非标准的。

SQL Server中等效的create table语句为:

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),这对于任何数据库都是相当标准的。

一些注意事项:

  • 这些字段中的任何一个都可能不需要varchar(max)。尽管可以使用它,但拥有一个可能占用兆字节数据的电话号码看起来很尴尬。
  • 您可以将tinyint替换为bit
  • DEFAULT NULL是多余的。