Досадная ошибка при попытке запустить 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
сbit
s. DEFAULT NULL
избыточно