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

我想在 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 会抱怨其中的3个呢?

PS: 在语句之间添加“ GO”(错误提示)不会产生任何效果。

58318 次浏览

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

我找到问题所在了。在 VS 中添加文件时,我忘记从文件属性设置 Build Action = None。所以改变这一点就解决了问题,项目现在就可以编译了。

不管这看起来有多老,我还是坚持了几个小时,我认为这种方法对很多人都有帮助。

Database project中,设置为 Build的文件被认为是数据库结构,因此在这种文件中只允许使用一条语句。不管是 Go还是其他任何批终止程序都不会改变那个行为,那个消息只是个错误。 更多信息 < a href = “ https://social.msdn.microsoft.com/Forums/sqlserver/en-US/47d4124b-82cd-48f9-8ba7-c2ae4c73cbcf/sql71006-why-am-i-getting-this-error。

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

然后,可以将 Database 项目的输出作为 Data-TierDB 应用程序的 dacpac 文件(否则不包括该文件)。

我在使用 SQLServer 数据工具时遇到了这个错误,这是因为我在项目中添加了一个错误的部署后脚本。

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

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

但是剧本应该有

<None Include="myscript.sql"/>

然而,我添加了我的脚本文件,它以一个 Build标记而不是一个 None结束。改为 None修复了错误。