Tsql VisualStudio认为正确的SQL语法是不正确的

Tsql VisualStudio认为正确的SQL语法是不正确的,tsql,visual-studio-2013,syntax-error,database-project,Tsql,Visual Studio 2013,Syntax Error,Database Project,在Visual Studio 2013中,我创建了一个数据库项目并导入了一个现有数据库。起初一切都很好,项目构建并生成了create脚本 然而,现在VisualStudio似乎认为存在SQL语法错误,在:错误附近返回了几个SQL46010:不正确的语法。这些都是由VS生成的代码-我没有写过任何代码 示例1: ALTER ROLE [db_owner] ADD MEMBER [SomeUser]; SQL46010: Incorrect syntax near ADD. DECLARE @Foo

在Visual Studio 2013中,我创建了一个数据库项目并导入了一个现有数据库。起初一切都很好,项目构建并生成了create脚本

然而,现在VisualStudio似乎认为存在SQL语法错误,在:错误附近返回了几个
SQL46010:不正确的语法。这些都是由VS生成的代码-我没有写过任何代码

示例1:

ALTER ROLE [db_owner] ADD MEMBER [SomeUser];
SQL46010: Incorrect syntax near ADD.
DECLARE @Foo NVARCHAR(7) = 'abcdefg';
SQL46010: Incorrect syntax near =.
示例2:

ALTER ROLE [db_owner] ADD MEMBER [SomeUser];
SQL46010: Incorrect syntax near ADD.
DECLARE @Foo NVARCHAR(7) = 'abcdefg';
SQL46010: Incorrect syntax near =.
如果我将代码复制/粘贴到SSMS中,一切都会正常工作

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

存在一种变通方法,我可以将问题文件的构建操作设置为“无”,但我需要在发布时包含这些文件

我试过:

ALTER ROLE [db_owner] ADD MEMBER [SomeUser];
SQL46010: Incorrect syntax near ADD.
DECLARE @Foo NVARCHAR(7) = 'abcdefg';
SQL46010: Incorrect syntax near =.
  • 删除并重新添加相同的代码
  • 将代码复制/粘贴到新的SQL文件
  • 关闭并重新打开解决方案
  • 关闭并重新打开Visual Studio
  • 更新Microsoft SQL Server数据工具(SSDT)
  • 更新VisualStudio

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

项目属性中有一个名为
目标平台的设置,告诉VS要检查语法的SQL Server版本

这些是对T-SQL语法的相对较新的添加,如果语法设置为例如SQL Server 2005,它们可能不起作用


旧线程,但这确实让我感到惊讶,所以我想与大家分享一下我的经验,ALTER ROLE的文档似乎表明它在SQL 2008上受支持,而实际上它只支持部分功能。您可以使用Alter Role更改角色名称,即
使用[NEW Role name]更改角色[Role name]
但要从角色中添加或删除成员,必须使用旧的(现在已弃用的)存储过程sp_addrolememeber,即
sp_addrolemeber'角色名','用户名'


正如Aaroninus指出的那样,如果您以SQL 2012或更高版本为目标,这将不会报告为错误。

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

在我的例子中,我通过单击名为“引用数据”==>添加现有项==>选择.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
解决方案:
应使用VS创建部署后脚本。在现有项目中,打开Visual studio并通过单击添加==>New Item==>script===>Post Deployment1.sql添加部署后脚本。创建PostDeployment1.sql文件后,只需复制粘贴内容,然后按F5即可正确执行PostDeployment1.sqlt没有任何错误。

这对我不起作用。我的项目设置为最新版本的VS和SQL server。修复方法是什么。我使用的是ADS而不是SSMS,因为我在Mac上。这也是我的问题。我已确认项目中的文件类型为部署前/部署后,但在.sqlproj文件中似乎没有在al之后包含其他属性l这对于前/后脚本至关重要,例如。