将数据库部署到Azure SQL失败,找不到sp_MSforeachtable。

12
我正在尝试使用 .dacpac 和发布配置文件将 SQL Server 数据库发布到 Azure SQL 数据库。我们使用本地 SQL Server 已经相当长时间,没有出现问题,现在我们正在评估 Azure 和 AWS ,看哪一种更适合我们的需求。
我们有一个 SQL Server 数据库项目,并希望将其部署到 Azure SQL 数据库,但它无法执行 SSDT 生成的脚本。这是因为生成的脚本包含对存储过程 sp_MSforeachtable 的调用,在 Azure SQL 中不存在。
我还将目标平台从 SQL Server 2016 更改为 Azure SQL V12。我通过 Visual Studio 2017 的发布配置文件和使用 Azure SQL 数据库部署任务的 VSTS 发布管理来尝试此操作。当然,在任务中提供必要的 .dacpacpublish.xml 文件。
我知道我可以手动添加存储过程,但似乎这些发布/部署方法并不打算这样做。有人有任何想法吗?
谢谢

请问能提供详细的步骤和代码以重现此问题吗? - starian chen-MSFT
如果您直接通过Visual Studio发布它,会得到什么结果? - starian chen-MSFT
我无法通过一个简单的数据库项目(一个表和一个存储过程)重现此问题。你能在OneDrive上分享详细的构建和发布日志吗?(将system.debug变量设置/添加为true) - starian chen-MSFT
你解决了这个问题吗? - starian chen-MSFT
所以在进一步调查后,我意识到我的团队在一段时间前添加了一个预部署脚本,该脚本使用了这个存储过程。因此,我将其创建添加到了预部署脚本中,现在我们可以继续进行了。谢谢! - dotnetmensch
3个回答

12

sp_MSforeachtable是Master数据库中的未经记录的存储过程。显然这个功能没有被移植到Azure SQL。我认为你需要手动将其添加到Master数据库中。完成后,你的DACPAC应该可以在自己的Azure SQL数据库上正常工作。我认为手动添加sp_MSforeachtable不会有问题。DACPAC旨在使你的数据库同步,而不是Master数据库。


2
如果您希望采用编程方法,也可以使用PowerShell脚本。https://learn.microsoft.com/en-us/azure/sql-database/scripts/sql-database-import-from-bacpac-powershell - hokkaidi

12

2
我很好奇是否有人了解那个Gist的分支以及每个分支的优缺点。 - Jonathan B.

0

没错,sp_MSforeachtable 存储过程在 Azure SQL 中仍然缺失,但是您可以轻松手动创建它。当您需要一次性重建所有表的索引时,它非常有用:

exec sp_MSforeachtable @command1="DBCC DBREINDEX ('?', '', 80)"

1
DBCC DBREINDEX已经弃用。请使用Exec sp_msforeachtable 'SET QUOTED_IDENTIFIER ON; ALTER INDEX ALL ON ? REBUILD'代替。 - Josh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接