Visual Studio 认为正确 SQL 语法不正确

Visual Studio thinks correct SQL syntax is incorrect

在Visual Studio2013年,我创建了一个数据库项目并导入了一个现有的数据库。一开始一切正常,项目构建并产生create脚本。

但是,现在Visual Studio似乎认为有SQL个语法错误,返回几个SQL46010: Incorrect syntax near:个错误。这些都是VS生成的代码-我没有写过任何代码。

示例 1:

ALTER ROLE [db_owner] ADD MEMBER [SomeUser];
SQL46010: Incorrect syntax near ADD.

示例 2:

DECLARE @Foo NVARCHAR(7) = 'abcdefg';
SQL46010: Incorrect syntax near =.

如果我 copy/paste 将代码导入 SSMS,一切正常。

不幸的是,这些阻止了项目的构建,这意味着我无法发布。由于它们是错误,而不是警告,我无法在项目设置中将它们设置为忽略。

存在一种解决方法,我可以将问题文件的构建操作设置为 None,但我需要在发布时包含这些文件。

我试过了:

我能找到的最接近的问题是 2012 年的 this MSDN thread,指出存在 SSDT SQL 解析器错误(促使我尝试更新 SSDT)。

项目属性中有一个名为 Target platform 的设置,它告诉 VS 要检查语法的 SQL 服务器版本。

这些是对 T-SQL 语法的相对较新的补充,如果语法设置为例如SQL 服务器 2005。

旧线程但这确实让我感到困惑,所以我想我会分享我的经验,ALTER ROLE 的文档似乎表明它在 SQL 2008 上受支持,而实际上只是部分功能是。您可以使用更改角色来更改角色的名称,即ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME] 但是要从角色中添加或删除成员,必须使用旧的(现在已弃用)存储过程 sp_addrolememeber 即 sp_addrolemember 'Role Name', 'User Name'.
正如 Aaroninus 指出的那样,如果您的目标是 SQL 2012 年或更高版本,这将不会报告为错误。

必须在项目中设置标志真的很愚蠢,因为我在我的 c# class 项目中的 oracle 和 mssql 中都有 ddl sql 脚本。

在我的例子中,我通过单击名为 "Reference Data" 的文件夹添加已经存在的 post 部署脚本(.sql 文件)==>添加现有项目==>Select .sql 文件列表,包括 Script.PostDeployment1.sql 文件。按 F5 时出现以下错误:

SQL46010: : 附近的语法不正确。

sql 文件的内容是:

:r ".\Customer.data.sql"
GO

:r ".\Product.data.sql"
GO

:r ".\OrderType.data.sql"
GO

:r ".\Orders.data.sql"
GO

解法: Post 应使用 VS.In 现有项目创建部署脚本,打开 Visual studio 并通过单击添加 post 部署脚本:添加==>新项目 ==>脚本 == >Post 部署脚本 ==>.PostDeployment1.sql。在创建 PostDeployment1.sql 文件后,只需复制粘贴您的内容,然后按 F5..PostDeployment1.sql 应该可以正确执行而不会出现任何错误。