Visual Studio 认为正确 SQL 语法不正确
Visual Studio thinks correct SQL syntax is incorrect
在Visual Studio2013年,我创建了一个数据库项目并导入了一个现有的数据库。一开始一切正常,项目构建并产生create脚本。
但是,现在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 =.
如果我 copy/paste 将代码导入 SSMS,一切正常。
不幸的是,这些阻止了项目的构建,这意味着我无法发布。由于它们是错误,而不是警告,我无法在项目设置中将它们设置为忽略。
存在一种解决方法,我可以将问题文件的构建操作设置为 None,但我需要在发布时包含这些文件。
我试过了:
- 删除并重新添加相同的代码
- Copy/pasting 代码到新 SQL 文件
- 关闭并重新打开解决方案
- 关闭并重新打开 Visual Studio
- 更新 Microsoft SQL 服务器数据工具 (SSDT)
- 正在更新Visual Studio
我能找到的最接近的问题是 2012 年的 this MSDN thread,指出存在 SSDT SQL 解析器错误(促使我尝试更新 SSDT)。
项目属性中有一个名为 Target platform
的设置,它告诉 VS 要检查语法的 SQL 服务器版本。
这些是对 T-SQL 语法的相对较新的补充,如果语法设置为例如SQL 服务器 2005。
旧线程但这确实让我感到困惑,所以我想我会分享我的经验,ALTER ROLE 的文档似乎表明它在 SQL 2008 上受支持,而实际上只是部分功能是。您可以使用更改角色来更改角色的名称,即ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME]
但是要从角色中添加或删除成员,必须使用旧的(现在已弃用)存储过程 sp_addrolememeber 即 sp_addrolemember 'Role Name', 'User Name'
.
正如 Aaroninus 指出的那样,如果您的目标是 SQL 2012 年或更高版本,这将不会报告为错误。
必须在项目中设置标志真的很愚蠢,因为我在我的 c# class 项目中的 oracle 和 mssql 中都有 ddl sql 脚本。
在我的例子中,我通过单击名为 "Reference Data" 的文件夹添加已经存在的 post 部署脚本(.sql 文件)==>添加现有项目==>Select .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
解法:
Post 应使用 VS.In 现有项目创建部署脚本,打开 Visual studio 并通过单击添加 post 部署脚本:添加==>新项目 ==>脚本 == >Post 部署脚本 ==>.PostDeployment1.sql。在创建 PostDeployment1.sql 文件后,只需复制粘贴您的内容,然后按 F5..PostDeployment1.sql 应该可以正确执行而不会出现任何错误。
在Visual Studio2013年,我创建了一个数据库项目并导入了一个现有的数据库。一开始一切正常,项目构建并产生create脚本。
但是,现在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 =.
如果我 copy/paste 将代码导入 SSMS,一切正常。
不幸的是,这些阻止了项目的构建,这意味着我无法发布。由于它们是错误,而不是警告,我无法在项目设置中将它们设置为忽略。
存在一种解决方法,我可以将问题文件的构建操作设置为 None,但我需要在发布时包含这些文件。
我试过了:
- 删除并重新添加相同的代码
- Copy/pasting 代码到新 SQL 文件
- 关闭并重新打开解决方案
- 关闭并重新打开 Visual Studio
- 更新 Microsoft SQL 服务器数据工具 (SSDT)
- 正在更新Visual Studio
我能找到的最接近的问题是 2012 年的 this MSDN thread,指出存在 SSDT SQL 解析器错误(促使我尝试更新 SSDT)。
项目属性中有一个名为 Target platform
的设置,它告诉 VS 要检查语法的 SQL 服务器版本。
这些是对 T-SQL 语法的相对较新的补充,如果语法设置为例如SQL 服务器 2005。
旧线程但这确实让我感到困惑,所以我想我会分享我的经验,ALTER ROLE 的文档似乎表明它在 SQL 2008 上受支持,而实际上只是部分功能是。您可以使用更改角色来更改角色的名称,即ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME]
但是要从角色中添加或删除成员,必须使用旧的(现在已弃用)存储过程 sp_addrolememeber 即 sp_addrolemember 'Role Name', 'User Name'
.
正如 Aaroninus 指出的那样,如果您的目标是 SQL 2012 年或更高版本,这将不会报告为错误。
必须在项目中设置标志真的很愚蠢,因为我在我的 c# class 项目中的 oracle 和 mssql 中都有 ddl sql 脚本。
在我的例子中,我通过单击名为 "Reference Data" 的文件夹添加已经存在的 post 部署脚本(.sql 文件)==>添加现有项目==>Select .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
解法: Post 应使用 VS.In 现有项目创建部署脚本,打开 Visual studio 并通过单击添加 post 部署脚本:添加==>新项目 ==>脚本 == >Post 部署脚本 ==>.PostDeployment1.sql。在创建 PostDeployment1.sql 文件后,只需复制粘贴您的内容,然后按 F5..PostDeployment1.sql 应该可以正确执行而不会出现任何错误。