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

Cos*_*scu 117 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.
Run Code Online (Sandbox Code Playgroud)

这些脚本仅包含INSERTDB上不同表中的语句.而且所有这些都是这样构建的

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

仅限于不同的表格和不同的数据.

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

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

Cos*_*scu 278

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

  • 很棒的.哇,微软,认真?这种错误或其消息在任何方式,形状或形式上都是直观的? (22认同)
  • 感谢这个答案,除了我对你的"忘记"的使用感到困惑 - 世界上如何知道这一点是必要的? (7认同)
  • 好极了!救了我的一天.并且在MSBuild上羞辱这样一个误导性的消息 (3认同)
  • 因为我前段时间做过类似的剧本,有人告诉我有关构建动作的事情:) (2认同)

Jam*_*aix 11

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

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

<Build Include="dbo\tables\mytable.sql"/>
Run Code Online (Sandbox Code Playgroud)

但脚本应该有

<None Include="myscript.sql"/>
Run Code Online (Sandbox Code Playgroud)

然而,我添加了我的脚本文件,它最终带有一个Build标签而不是None. 更改它以None修复错误。


Jar*_*lec 8

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

Database project,设置为的文件Build被视为数据库结构,因此在这样的文件中只允许一个语句.Go也没有任何其他批处理终止符会改变这种行为,该消息只是错误.更多信息在这里.

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

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