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

问题描述 投票:0回答:6

在 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 数据工具 (SSDT)
  • 更新 Visual Studio

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

t-sql visual-studio-2013 syntax-error database-project
6个回答
34
投票

项目属性中有一个名为

Target platform
的设置,它告诉 VS 要检查语法的 SQL Server 版本。

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

Visual Studio 2013 database project settings


2
投票

旧线程,但这确实让我困惑,所以我想我应该分享我的经验,ALTER ROLE 的文档似乎表明它在 SQL 2008 上受支持,而实际上只有部分功能受支持。您可以使用更改角色来更改角色的名称,即

ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME]
但要向角色添加或删除成员,必须使用旧的(现已弃用)存储过程 sp_addrolememeber,即
sp_addrolemember 'Role Name', 'User Name'

正如 Aaroninus 指出的,如果您的目标是 SQL 2012 或更高版本,则不会报告错误。


1
投票

在我的例子中,我通过单击名为“参考数据”的文件夹==>添加现有项目==>选择包含 Script.PostDeployment1.sql 文件的 .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.After创建 PostDeployment1.sql 文件只需复制粘贴您的内容,然后按 F5..PostDeployment1.sql 应该正确执行,没有任何错误。


0
投票

这些解决方案都不适合我,但有效的是从我的项目根目录中删除一个直接以“.dbmdl”结尾的文件。

希望这对任何偶然发现这个问题的人有帮助:-)


-1
投票

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


-1
投票

当您向项目添加新的类文件时,例如,您也会收到此错误误将“createtable.sql.cs”重命名为“createtable.sql”。

右键单击该文件,然后单击属性并在构建操作中选择

© www.soinside.com 2019 - 2024. All rights reserved.