删除 'OPTIMIZE_FOR_SEQUENTIAL_KEY' 会解决我的 script.sql 的故障还是涉及更多(SQL Server Express DB -> SQL Server)?

Would removing 'OPTIMIZE_FOR_SEQUENTIAL_KEY' solve the failure of my script.sql or is more involved (SQL Server Express DB -> SQL Server)?

我正在尝试在我的托管站点 (GoDaddy/Plesk) 上将我的 SQL Server Express 数据库设置为成熟的 SQL 服务器数据库,但是 运行 进入 运行 宁 script.sql 文件的一系列错误消息。

我正在按照 here 的步骤设置我的数据库,首先是 运行 在 MSSMS 中连接我的 script.sql 文件,同时连接到远程服务器。

我一直无法连接,但最终可以按照 seanb 的建议省略端口号 here:

...但我在 运行 脚本文件中收到了这些错误消息:

这是因为我的数据库是 SQL Server Express,并且它正在尝试创建一个 SQL Server (standard/regular) 数据库,而 'OPTIMIZE_FOR_SEQUENTIAL_KEY' 正准备“常规" SQL Server/TSQL?

如果是(或无论如何),我需要做什么才能将 sql 脚本转换为 运行?

关于更多细节,所有投诉都是“'OPTIMIZE_FOR_SEQUENTIAL_KEY' 不是公认的 CREATE TABLE 选项。”除了一个,它是:

关键字 'with' 附近的语法不正确。如果这条语句是一个普通的 table 表达式、一个 xmlnamespaces 子句或一个更改跟踪上下文子句,则前面的语句必须以分号结束。

关于“OPTIMIZE_FOR_SEQUENTIAL_KEY”的问题,这里是第一个被投诉的地方:

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY],

...至于“关键字 'with' 附近的语法不正确”,这里是它发生的地方:

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]

换句话说,它是完全相同的 TSQL,但应用于不同的列,并导致不同的错误消息 - 第一个抱怨“OPTIMIZE”,第二个只是含糊地抱怨某事靠近“WITH”

这里是上下文:

[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY],
 CONSTRAINT [CK_ACTORS_Column] UNIQUE NONCLUSTERED 
(
    [ActorId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

我很想简单地删除所有“OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF”语句,然后再试一次;这样做安全吗?

你的目标SQL服务器只是一个旧版本。确切地说是 SQL Server 2014 SP3 CU4,OPTIMIZE_FOR_SEQUENTIAL_KEY 是 SQL Server 2019 中的新功能。SSMS 脚本始终会列举所有选项,即使设置为默认值以确保完全保真脚本,有时会很痛苦。

您可以简单地删除该选项,脚本应该与 SQL 2014 兼容。事实上,如果您没有设置任何 non-default 值,您可以删除所有这些选项。

或者查看您的托管商是否有 SQL Server 2019 可用。或者升级您的主机 :)