生成脚本的“角色”附近的语法不正确

Rea*_*ces 5 ssms t-sql sql-server-2008-r2

我最近不得不多次重新创建用户。
为了方便创建用户,我会右键单击用户并选择script login ascreate toNew Query Editor Window

但是,执行此操作后,我收到一个语法错误:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'ROLE'.
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

Aar*_*and 9

您需要确保您的脚本选项设置为针对正确的版本。您可以在工具/选项/对象资源管理器/脚本/服务器版本的脚本中执行此操作。在您的情况下,您应该选择 2008(它是 2008 和 2008 R2 的保护伞),尽管 2005 可能也适用。

在此处输入图片说明

挑战在于,如果您迁移到 SSMS 的 SQL Server 2016 版本,则这种向后兼容性的某些部分会被破坏(实际上它也可能在您现在使用的版本中被破坏,我最近没有测试过,但是如果因此,修复的可能性较小):

您无法为 2008 年编写此特定登录角色的脚本的主要原因是CREATE SERVER ROLE- 实际上首先创建用户定义的服务器角色的功能是在 SQL Server 2012 中引入的。如果您想部署到某个版本 < 2012 的角色。

更新:微软刚刚在 Connect 项中添加了一条评论,表示不会修复,原因如下:

你好亚伦,


我们决定不改变脚本的当前行为。


1. 对于来自 OE 的“脚本为”场景,这是因为在 2012 年之前不存在创建/更改/删除服务器角色的语法,这就是抛出异常的原因(没有任何可以生成的内容)有效的)


2. 对于属性 -> 脚本场景也是如此。脚本按钮旨在生成在按下“确定”按钮时将运行的脚本,因此它不会考虑当前的 SSMS 脚本选项。


我将更新为 #1 显示的错误消息,以便更清楚地指出问题所在。