SQL脚本中的错误:每批只允许一个语句

问题描述 投票:124回答:4

我想在PostDeployment中的DACPAC中运行4个sql脚本,但是当我尝试为其中3个构建VS项目时,出现此错误:

Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.

脚本在数据库的不同表中仅包含INSERT语句。它们的结构都像这样]

IF NOT EXISTS (SELECT 1 FROM dbo.Criteria WHERE Name = 'Mileage') INSERT INTO dbo.Criteria(Name) VALUES ('Mileage');

仅在不同的表上和具有不同的数据。

我的问题是,当所有脚本的语法和操作都相同时,为什么VS会抱怨其中的三个?

PS:由于错误提示在语句之间添加“ GO”不会执行任何操作。

sql sql-server visual-studio-2012 dacpac
4个回答
308
投票

我发现了问题。当我在VS中添加文件时,我忘记从文件属性中设置Build Action = None。因此,进行更改可以解决问题,并且现在可以编译项目。


8
投票

尽管这看起来已经很老了,但我也坚持了几个小时,我认为这种方式可能对很多人有帮助。

Database project中,设置为Build的文件被认为是数据库结构,因此,根据设计,在该文件中只允许一个语句。 Go或任何其他批处理终止符都不会更改该行为,该消息只是错误。更多信息here.

此类项目中的文件还有许多其他构建选项。对于您的情况,似乎是PostDeploy。在这样的文件中,您可以使用各种命令,例如inserts等。>

然后,您可以将数据库项目的输出用作数据层DB应用程序的dacpac文件(否则,不包括在内。)>

将文件构建操作更改为无。

从每个语句的末尾删除;(分号),我不确定,但是在上述插入语句之间不需要GO。


0
投票

将文件构建操作更改为无。


-3
投票

从每个语句的末尾删除;(分号),我不确定,但是在上述插入语句之间不需要GO。

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