Tsql 如何获取数据库镜像状态的描述

Tsql 如何获取数据库镜像状态的描述,tsql,sql-server-2008-r2,database-mirroring,Tsql,Sql Server 2008 R2,Database Mirroring,我已在SQL server上设置了警报,以便在任何镜像数据库的镜像状态发生更改时向我发出警报,如所示 一切正常,但我想知道是否有任何方法可以通过T-SQL从$(WMI(state))提供的状态ID获取数据库镜像状态的描述 我链接到的文章提供了一个所有可能状态及其含义的列表,因此我可以创建自己的表或使用CASE语句,但如果我可以使用内置函数或从现有表中选择,那就太好了。也许今天我的Google能力不强,但我找不到任何东西。为此,我在脚本中添加了一个CASE语句-我本可以创建一个表,但这更便于移植,

我已在SQL server上设置了警报,以便在任何镜像数据库的镜像状态发生更改时向我发出警报,如所示

一切正常,但我想知道是否有任何方法可以通过T-SQL从$(WMI(state))提供的状态ID获取数据库镜像状态的描述


我链接到的文章提供了一个所有可能状态及其含义的列表,因此我可以创建自己的表或使用CASE语句,但如果我可以使用内置函数或从现有表中选择,那就太好了。也许今天我的Google能力不强,但我找不到任何东西。

为此,我在脚本中添加了一个CASE语句-我本可以创建一个表,但这更便于移植,因为我想将脚本复制到多个不同的服务器

declare @MirrorStateDesc varchar(50)
select @MirrorStateDesc = '$(ESCAPE_NONE(WMI(State)))'
select @MirrorStateDesc = CASE @MirrorStateDesc WHEN '7' THEN 'Manual Failover' WHEN '8' THEN 'Automatic Failover' WHEN '10' THEN 'No Quorum' WHEN '12' THEN 'Principle Running Exposed' ELSE @MirrorStateDesc  END
我只在状态7、8、10和12上使用这个脚本,所以它们是我添加到案例陈述中的唯一脚本。如果有人想扩展脚本以供自己使用,其他值和描述都在我在问题中链接的页面上


我仍然很惊讶,没有一个内置的函数来实现这一点

??(虽然您可以使用数据库ID而不是状态ID)该视图的mirroring_state_desc列引用了我认为不同的内容。无论哪种方式,它只显示当前状态,这对我来说都不好,因为我想描述一种只存在一瞬间的状态(例如,状态7是“手动故障切换”)。我有一个捕获状态7已发生的警报和一个t-SQL脚本,该脚本通过电子邮件向我发送状态7已发生的消息,但希望能够将“7”转换为“手动故障切换”。您找到编号到名称映射的参考源了吗?没关系,有一个列表