我们在 sys.databases 中的数据库的 Database_Id 与 DB_ID 的不匹配(“<我们的数据库”)

All*_* H. 5 azure-sql-database

我们数据库的 sysdatabases 和 sys.databases 中的数据库 ID 是 4。

函数 DB_ID ( '<our database>' ) 为我们的数据库返回 5。此外,表 sys.dm_db_missing_index_details 中我们数据库的任何缺失索引数据也分配给 database_id 5。

在我看来,sys.databases 的 ID 应该是 5 而不是4。这让我很抓狂,让 sp_BlitzIndex 不起作用。

有谁知道为什么我的数据库 ID 在 SQL Azure 上的 sys.databases、sys.dm_db_missing_index_details 和 DB_ID() 之间不匹配?它真的搞砸了还是在 SQL Azure 中工作不同?

Kin*_*hah 6

Azure SQL DB 与众不同!

database_id来自sys.databases(不要使用sysdatabases<-- 已弃用)的列对于数据库将保持不变。

DB_ID()是一个函数,如果 Azure DB 故障转移,该值将更改。

最好使用name<-- 数据库名称列。

人们已经报告了这里这里

不应依赖 azure 中内置的数据库 id / db_id,因为它会在数据库移动到不同的 sql 实例时发生变化(因为数据库故障转移)。使用名称而不是 id。另请注意,db_id 可能与 sys.databases 中的不同