删除 '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)?的主要内容,如果未能解决你的问题,请参考以下文章
开发环境Mac 中删除 Python ( 删除 Python 框架 | 删除 Python 应用程序 | 删除 Python 链接 )