sql - 尝试运行从数据库浏览器导出的 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 - 不确定这是否会有所不同
为什么生活必须如此艰难?
解决方案
该代码在几个方面都特定于 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)
任何这些字段。虽然你可以使用它,但拥有一个可能占用兆字节数据的电话号码看起来很尴尬。 - 您可能可以将
tinyint
s替换为bit
s。 DEFAULT NULL
是多余的。
推荐阅读
- python - 最后一个子进程调用在 FFMPEG 的串联代码中不起作用。我应该如何解决这个问题?
- django - 如何在 Django Admin 中对外部字段启用列排序
- java - 带有按钮的 Swing JPanel 无法重绘
- python - sys.exc_info() 的目的是什么?
- macos - 在 macOS Catalina 上无法识别 Conda 命令
- javascript - 如何在 Vue 中调用可重用组件上的方法
- angular - 配置我的应用程序以阻止它重写 URL?
- r - 我没有成功使用我想要的 LOCF 方法
- reactjs - 带有样式的材料 UI 与反应测试库抛出警告
- javascript - useReducer 中第三个参数的目的是什么?