在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中,一切正常。
不幸的是,这些阻止了项目的构建,这意味着我无法发布。由于它们是错误,而不是警告,我无法在项目设置中将它们设置为忽略。
存在一种解决方法,我可以将问题文件'Build Action设置为None,但我在发布时需要包含这些文件。
我尝试过:
我能找到的最接近的问题是2012年的this MSDN thread,说明有一个错误的SSDT SQL解析器(这促使我尝试更新SSDT)。
答案 0 :(得分:24)
项目属性中有一个名为Target platform
的设置告诉VS要检查语法的SQL Server版本。
这些是对T-SQL语法的相对较新的补充,如果将语法设置为例如,它们可能不起作用。 SQL Server 2005。
答案 1 :(得分:1)
旧线程,但这确实让我抓狂,所以我认为我分享了我的经验,ALTER ROLE的文档似乎表明它在SQL 2008上受支持,而实际上只有部分功能。您可以使用更改角色来更改角色的名称,即ALTER ROLE [ROLE NAME] WITH [NEW ROLE NAME]
但是要在角色中添加或删除成员,必须使用旧的(现在已弃用的)存储过程sp_addrolememeber,即sp_addrolemember 'Role Name', 'User Name'
。
正如Aaroninus指出,如果您定位SQL 2012或更高版本,则不会报告为错误。
答案 2 :(得分:0)
必须在项目中设置一个标志是非常愚蠢的,因为我在c#class项目中的oracle和mssql中都有ddl sql脚本。
答案 3 :(得分:-1)
在我的情况下,我通过单击名为“参考数据”的文件夹添加已经存在的后期部署脚本(.sql文件)==>添加现有项==>选择包括Script.PostDeployment1的.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。创建PostDeployment1.sql文件只需复制粘贴内容,然后按F5。PostDeployment1.sql应该正确执行,没有任何错误。