我想在部署后的一个 DACPAC 中运行 4 个 sql 脚本,但是当我尝试为其中 3 个脚本构建 VS 项目时,出现此错误:
每批只允许一个语句。语句之间可能需要批处理分隔符,例如"GO"。
这些脚本仅包含数据库上不同表中的INSERT
语句。所有这些都是这样的结构
如果不存在(从 DBO 中选择 1。条件 其中名称 ="里程")插入 DBO。标准(名称)值("里程");仅在不同的表和不同的数据上。
我的问题是,当所有脚本在语法和操作方面都相同时,为什么 VS 抱怨其中的 3 个?
PS:在错误建议的语句之间添加"GO"不会做任何事情。
我发现了问题。当我在VS中添加文件时,我忘记从文件属性中设置Build Action = None
。因此,更改解决了问题,现在可以编译项目。
不管这似乎很老了,我也坚持了几个小时,我认为这种方式可能对许多人有所帮助。
在Database project
中,设置为Build
的文件被认为是数据库结构,因此在设计上只允许在这样的文件中有一个语句。 Go
任何其他批处理终止符都不会更改该行为,但该消息只是错误。更多信息在这里。
此类项目中的文件还有很多其他构建选项。对于您的情况,似乎PostDeploy
.在这样的文件中,您可以有各种命令,如inserts
等。
然后,您可以将数据库项目的输出用作数据层数据库应用程序的 dacpac 文件(否则不包括在内)。
我在使用 SQL Server 数据工具时遇到了此错误,这是因为我的部署后脚本被错误地添加到项目中。
在项目文件中,任何数据库对象都应具有类似
<Build Include="dbotablesmytable.sql"/>
但是脚本应该有
<None Include="myscript.sql"/>
但是我添加了我的脚本文件,它最终得到了一个Build
标签而不是一个None
。将其更改为None
修复了错误。
从每个语句的最后一个中删除;(分号),我不确定,但在上述插入语句之间不需要 GO。