SQL脚本出错:每批只允许一个语句

时间:2013-09-09 12:42:36

标签: sql sql-server visual-studio-2012 dacpac

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

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

脚本在DB上的不同表中仅包含INSERT个语句。所有这些都是这样结构的

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

仅适用于不同的表格和不同的数据。

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

PS:在语句之间添加“GO”,因为错误表明没有做任何事情。

4 个答案:

答案 0 :(得分:244)

我发现了这个问题。当我在VS中添加文件时,我忘了从文件属性中设置Build Action = None。所以改变这个问题就解决了问题,现在项目正在编译中。

答案 1 :(得分:7)

无论这看起来有多久,我也坚持了几个小时,我认为这种方式对许多人都有帮助。

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

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

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

答案 2 :(得分:0)

使用SQL Server数据工具时遇到此错误,这是因为我将错误的部署后脚本添加到了项目中。

在项目文件中,任何数据库对象都应具有类似

的元素
<Build Include="dbo\tables\mytable.sql"/>

但是脚本应该具有

<None Include="myscript.sql"/>

但是,我添加了脚本文件,该文件最终以Build标记而不是None标记。将其更改为None可修复该错误。

答案 3 :(得分:-3)

从每个语句的最后一个中删除;(分号),我不确定,但上述插入语句之间不需要GO。