我只是试图运行基本的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中运行查询时,出现此烦人的错误
第15级状态1行3的消息102
'`'附近的语法不正确。
我尝试删除第一个(
和'Id'
之间的所有空格,但随后我得到了
第15层状态1,第2行,Msg 102
'`'附近的语法不正确。
我还尝试将s替换为,但结果相同。...
我很确定要在其上执行此操作的服务器正在运行SQL Server Express-不知道这是否有所不同
为什么生活如此艰难?
答案 0 :(得分:0)
该代码在几个方面非常特定于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
替换为bit
。DEFAULT NULL
是多余的。