为什么我在尝试使用从 SQL Server 2012 在 SQL Server 2008 上获取的 DDL 脚本创建数据库时出现这些 alter database 错误?

Why am I obtaining these alter database error trying to create a DB using a DDL script obtained from SQL Server 2012 on SQL Server 2008?

我是 SQL 服务器的新手,我发现了以下困难。

我提取 DDL 以从 SQL Server 2012 计算机创建数据库,然后我 运行 此 DDL 在旧的 SQL Server 2008 实例上创建数据库,然后我我收到以下错误:

Msg 102, Level 15, State 6, Line 1
Incorrect syntax near 'FILESTREAM'.

Msg 102, Level 15, State 6, Line 1
Incorrect syntax near 'TARGET_RECOVERY_TIME'.

第一个错误在这一行:

ALTER DATABASE [SIGLA-AZIENDA_SIGLA-AOO] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF ) 
GO

第二个错误在这一行:

ALTER DATABASE [SIGLA-AZIENDA_SIGLA-AOO] SET TARGET_RECOVERY_TIME = 0 SECONDS 
GO

这些错误的原因可能是什么?与SQL服务器的不同版本有关吗?据我所知,所涉及的项目没有使用 BLOB 字段之类的东西,所以我认为 FILESTREAM 不是强制性的。

我该如何尝试解决这些问题?

因为 SQL 支持的服务器功能因版本而异。

要解决您的问题,请单击 设置脚本选项 对话框中的 高级 按钮,然后将 脚本更改为Server VersionSQLServer 2008,然后我们可以得到SQLServer 2008的脚本数据库如下:

这个 msdn link 是关于另一个与你的问题类似的问题: https://social.msdn.microsoft.com/Forums/en-US/e1d75d41-d755-4a43-aaa7-2a109477177b/errors-on-script-while-parsing?forum=sqlexpress

是的,与SQL服务器版本有关。

FileStream 于 2012 年引入,如 Alter database set options 页面所述:

<FILESTREAM_option> ::= Applies to: SQL Server ( SQL Server 2012 (11.x) through SQL Server 2017)

target_recovery_time 也是如此(记录在同一页中):

<target_recovery_time_option> ::= Applies to: SQL Server (SQL Server 2012 (11.x) through SQL Server 2017)