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

Posted

技术标签:

【中文标题】删除 \'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)?删除 'OPTIMIZE_FOR_SEQUENTIAL_KEY' 会解决我的 script.sql 的失败还是涉及更多(SQL Server Express DB -> SQL Server)? 【发布时间】:2020-10-23 16:02:53 【问题描述】:

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

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

我在连接时遇到了问题,但最终还是按照 seanb here 的建议省略了端口号:

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

这是因为我的数据库是 SQL Server Express,它正在尝试创建一个 SQL Server(标准/常规)数据库,而“OPTIMIZE_FOR_SEQUENTIAL_KEY”正在“常规”SQL Server/TSQL?

如果是这样(或在任何情况下),我需要做什么才能让 sql 脚本运行?

更详细一点,所有投诉都是“'OPTIMIZE_FOR_SEQUENTIAL_KEY' 不是公认的 CREATE TABLE 选项。”除了一个,即:

关键字“with”附近的语法不正确。如果这个语句是一个公用表表达式、一个 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”语句并再试一次;这样做安全吗?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

令人惊讶,因为这是 GoDaddy,据说是最大最好的之一。 是的,只需删除所有“OPTIMIZE_FOR_SEQUENTIAL_KEY”即可 - 谢谢!

以上是关于删除 'OPTIMIZE_FOR_SEQUENTIAL_KEY' 会解决我的 script.sql 的失败还是涉及更多(SQL Server Express DB -> SQL Server)?的主要内容,如果未能解决你的问题,请参考以下文章

Linux_019_删除rm

gorm软删除和硬删除

开发环境Mac 中删除 Python ( 删除 Python 框架 | 删除 Python 应用程序 | 删除 Python 链接 )

linux按年份删除文件?

删除功能的实现(单个删除与批量删除)

vi-vim :删除撤销恢复删除复制删除