我想检查数据库是否作为其他数据库的“发布者”工作。
为此,我正在计划检查该实例上是否存在数据库“分发”。
阅读this之后我认为我可以做到
new Sqlcommand("SELECT name FROM master.dbo.sysdatabases WHERE name = @name")
并解决了我的问题...但我的数据库中没有那个表...:s
还有另一种方法可以解决我的问题吗?
答案 0 :(得分:1)
假设您有足够的权限查看数据库元数据,可以使用
SELECT CASE
WHEN DB_ID('distribution') IS NULL THEN 0
ELSE 1
END AS distributionExists
答案 1 :(得分:1)
如果您想知道数据库是否是发布者,那么查找分发服务器是错误的检查。数据库可以有一个远程分发服务器,在这种情况下,您将获得误报。或者分销商可能存在,但数据库可能不是出版商,在这种情况下,您会得到误报。更不用说分发数据库可能有任何名称,因此查找名为distribution
的数据库也是错误的。
正确的方法是起诉内置的复制助手程序:
exec sp_helppublication
将返回有关数据库中所有发布的信息。如果数据库不是发布者,则不会返回任何内容(请求行动)。exec sp_helpdistributor
将返回有关发布商exec sp_helpdistributiondb
将返回有关分发数据库的信息此外,可以在sys.databases
中找到数据库是发布者,订阅者还是分发者的简单事实:
- is_published 数据库是a中的发布数据库 事务或快照复制拓扑。
- is_merge_published 数据库是合并复制拓扑中的发布数据库。
- is_subscribed 数据库是a中的订阅数据库 复制拓扑。
- is_distributor 数据库是分发版 复制拓扑的数据库。
答案 2 :(得分:0)
select *
from sys.databases
where name = @name
非常接近。它看起来像是SQL Server 2000目录视图。你要找的是查询sys.databases
。