Досадная ошибка при попытке запустить SQL, экспортированный из браузера db для sqlite - PullRequest
0 голосов
/ 20 октября 2018

Я просто пытаюсь запустить базовый сценарий SQL для воссоздания базы данных.

База данных изначально была создана в SQLite, и я экспортировал ее с помощью браузера БД для 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 я получаю эту досадную ошибку

Msg 102, Уровень 15, Состояние 1, Строка 3
Неверный синтаксис рядом с '`'.

Я попытался удалить все пробелы между первыми ( и 'Id', но затем я просто получил

Сообщение 102, Уровень 15, Состояние 1, Строка 2
Неверный синтаксис рядом с `` '.

Я также пытался заменить `s на', но с тем же результатом ....

Я почти уверен, что сервер, на котором я пытаюсь это выполнить, работает под управлением SQL Server Express - не уверен, что это имеет значение

Почему жизнь должна быть такой сложной?

1 Ответ

0 голосов
/ 20 октября 2018

Код довольно специфичен для 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), это будет довольно стандартно для любой базы данных.

Некоторые примечания:

  • Возможно, вам не нужно varchar(max) для любого из этих полей.Несмотря на то, что вы можете использовать его, выглядит неудобно иметь номер телефона, который может занимать мегабайты данных.
  • Возможно, вы могли бы заменить tinyint s на bit s.
  • DEFAULT NULL избыточно.
...