Досадная ошибка при попытке запустить SQL, экспортированный из браузера БД для sqlite

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

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

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

1 ответ

Код довольно специфичен для SQLite в нескольких отношениях:

  • Использование backticks является нестандартным.
  • Наличие длины для целочисленных столбцов в нестандартных.
  • 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с bits.
  • DEFAULT NULL избыточно
Другие вопросы по тегам