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

时间:2015-01-14 17:22:10

标签: tsql visual-studio-2013 syntax-error database-project

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

但是,现在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 =.

如果我将代码复制/粘贴到SSMS中,一切正常。

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

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

我尝试过:

  • 删除并重新添加相同的代码
  • 将代码复制/粘贴到新的SQL文件
  • 关闭并重新开启解决方案
  • 关闭并重新打开Visual Studio
  • 更新Microsoft SQL Server数据工具(SSDT)
  • 更新Visual Studio

我能找到的最接近的问题是2012年的this MSDN thread,说明有一个错误的SSDT SQL解析器(这促使我尝试更新SSDT)。

4 个答案:

答案 0 :(得分:24)

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

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

Visual Studio 2013 database project settings

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

在我的情况下,我通过单击名为“参考数据”的文件夹添加已经存在的后期部署脚本(.sql文件)==>添加现有项==>选择包括Script.PostDeployment1的.sql文件列表。 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,然后单击以下命令添加部署后脚本:添加==>新建项==>脚本==>部署后脚本==>。PostDeployment1.sql。创建PostDeployment1.sql文件只需复制粘贴内容,然后按F5。PostDeployment1.sql应该正确执行,没有任何错误。

相关问题