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 2015 中创建 SQL Server 项目?