156

我有 4 个 sql 脚本,我想在 PostDeployment 的 DACPAC 中运行,但是当我尝试为其中 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 会抱怨其中的 3 个?

PS:按照错误提示在语句之间添加“GO”不会做任何事情。

4

4 回答 4

394

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

于 2013-09-09T13:02:14.790 回答
15

不管这似乎很老,我也坚持了几个小时,我认为这种方式可能对许多人有所帮助。

Database project中,设置为的文件Build被视为数据库结构,因此设计上只允许在此类文件中使用一条语句。Go任何其他批处理终止器都不会改变这种行为,该消息只是错误的。更多信息在这里。

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

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

于 2017-10-28T20:53:43.727 回答
4

我在使用 SQL Server Data Tools 时遇到了这个错误,这是因为我有一个错误地添加到项目中的部署后脚本。

在项目文件中,任何数据库对象都应具有以下元素

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

但是脚本应该有

<None Include="myscript.sql"/>

但是我添加了我的脚本文件,它以Build标签而不是None. 更改它以None修复错误。

于 2020-11-20T20:39:56.597 回答
-3

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

于 2013-09-09T12:47:30.303 回答