首页 > 解决方案 > 尝试运行从数据库浏览器导出的 SQL 以用于 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 中运行查询时出现这个烦人的错误

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

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

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

我也尝试用 's 替换 `s 但结果相同....

我很确定我尝试执行此操作的服务器正在运行 SQL Server Express - 不确定这是否会有所不同

为什么生活必须如此艰难?

标签: sqlsqlitesql-server-expressdb-browser-sqlite

解决方案


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

  • 反引号的使用是非标准的。
  • 在非标准中具有整数列的长度。
  • text并且longtext是非标准的。

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)任何这些字段。虽然你可以使用它,但拥有一个可能占用兆字节数据的电话号码看起来很尴尬。
  • 您可能可以将tinyints替换为bits。
  • DEFAULT NULL是多余的。

推荐阅读