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

Posted

技术标签:

【中文标题】Visual Studio 认为正确的 SQL 语法不正确【英文标题】:Visual Studio thinks correct SQL syntax is incorrect 【发布时间】:2015-01-14 17:22:10 【问题描述】:

在 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 中,一切正常。

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

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

我试过了:

删除并重新添加相同的代码 复制/粘贴代码到新的 SQL 文件 关闭并重新打开解决方案 关闭和重新打开 Visual Studio 更新 Microsoft SQL Server Data Tools (SSDT) 更新 Visual Studio

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

这对我不起作用我的项目设置为最新版本的 VS 和 SQL 服务器。解决方法是什么。我使用的是 ADS 而不是 SSMS,因为我在 Mac 上 对于我的项目,目标平台已经是“SQL Server 2016”。对我来说,解决方案是“清理”项目并再次重做。【参考方案2】:

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

【讨论】:

【参考方案3】:

在我的情况下,我通过单击名为“参考数据”的文件夹添加现有的部署后脚本(.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并通过单击添加部署后脚本:添加==>新项目==>脚本==>部署后脚本==>.PostDeployment1.sql.After创建 PostDeployment1.sql 文件只需复制粘贴您的内容,然后按 F5..PostDeployment1.sql 应该可以正确执行而不会出现任何错误。

【讨论】:

这也是我的问题。我已经确认项目中的文件类型是部署前/部署后,但看起来它没有在 .sqlproj 文件中包含附加属性,毕竟这对于前/后脚本至关重要,例如【参考方案4】:

不得不在项目中设置一个标志真的很愚蠢,因为我在我的 c# 类项目中的 oracle 和 mssql 中都有 ddl sql 脚本。

【讨论】:

以上是关于Visual Studio 认为正确的 SQL 语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2017 添加引用报错

Visual Studio 从某处检索到项目的不正确路径

如何在 Visual Studio 2015 中创建 SQL Server 项目?

打开 .sql 文件时,Visual Studio 2010 挂断

Visual Studio 连接 Sql Server

从 Visual Studio 连接到 SQL Server 2005