在 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 中,一切正常。
不幸的是,这些阻止了项目的构建,这意味着我无法发布。由于它们是错误,而不是警告,因此我无法在项目设置中将它们设置为忽略。
存在一种解决方法,我可以将问题文件的“构建操作”设置为“无”,但我需要在发布时包含这些文件。
我已经尝试过:
我能找到的最接近的问题是 2012 年的 这个 MSDN 线程,指出 SSDT SQL 解析器存在错误(这促使我尝试更新 SSDT)。
项目属性中有一个名为
Target platform
的设置,它告诉 VS 要检查语法的 SQL Server 版本。
这些是 T-SQL 语法的相对较新的补充,如果语法设置为例如,它们可能不起作用。 SQL Server 2005。
旧线程,但这确实让我困惑,所以我想我应该分享我的经验,ALTER ROLE 的文档似乎表明它在 SQL 2008 上受支持,而实际上只有部分功能受支持。您可以使用更改角色来更改角色的名称,即
ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME]
但要向角色添加或删除成员,必须使用旧的(现已弃用)存储过程 sp_addrolememeber,即 sp_addrolemember 'Role Name', 'User Name'
。在我的例子中,我通过单击名为“参考数据”的文件夹==>添加现有项目==>选择包含 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 应该正确执行,没有任何错误。
这些解决方案都不适合我,但有效的是从我的项目根目录中删除一个直接以“.dbmdl”结尾的文件。
希望这对任何偶然发现这个问题的人有帮助:-)
必须在项目中设置一个标志真的很愚蠢,因为我在我的 C# 类项目中的 oracle 和 mssql 中都有 ddl sql 脚本。
当您向项目添加新的类文件时,例如,您也会收到此错误误将“createtable.sql.cs”重命名为“createtable.sql”。
右键单击该文件,然后单击属性并在构建操作中选择无。