【发布时间】:2009-06-30 20:11:45
【问题描述】:
我被要求这样做,但我不知道是否有这样做的标准方法。有谁知道 SQL Server 中是否有办法导出这个?
【问题讨论】:
-
你能限定你的定义吗?例如,您是指您的 SQL Server 复制配置的详细信息吗?
-
不如从一个更简单的问题开始:“是否可以导出我的 SQL 复制定义...”
标签: sql-server xml replication
我被要求这样做,但我不知道是否有这样做的标准方法。有谁知道 SQL Server 中是否有办法导出这个?
【问题讨论】:
标签: sql-server xml replication
AFIK 没有这样做的标准方法。复制作为一种技术早于 XML,它的工具集和元数据不是以 XML 为中心的。但是,与复制相关的所有内容都存储在表中的某个位置,无论是在主数据库还是在 msdb 或在分发数据库中,请参阅Replication Tables topic on MSDN,或在复制 DMV(sys.dm_repl_articles 和 sys.dm_repl_schemas)中。所有这些信息都可以被查询并格式化为 XML,但我不知道有任何标准 XML 模式涵盖了这些信息。
【讨论】:
Remus 的回答效果很好。这是我用来将其导出为 XML 的 SQL 脚本。希望它对其他人有用:
DECLARE @PublicationId INT
SET @PublicationId = 1 –- Use your publication ID here. Use SELECT * FROM syspublications to see a list of publications
select
Publication.name AS [Name]
, Publication.description AS [Description]
, Article.name AS [Name]
, Article.dest_table AS [Table]
, [Column].name AS [Name]
, [Column].[Type]
, [Column].MaxLength
, [Column].Nullable
from dbo.syspublications Publication
join dbo.sysarticles Article on Publication.pubid = Article.pubid
join sys.tables st on st.object_id = Article.objid
join dbo.sysarticlecolumns ac on Article.artid = ac.artid
join
(
select
sc.object_id
, sc.column_id
, sc.name AS [Name]
, sty.name AS [Type]
, sc.max_length AS MaxLength
, sc.is_nullable AS Nullable
from dbo.syspublications p
join dbo.sysarticles a on p.pubid = a.pubid
join dbo.sysarticlecolumns ac on a.artid = ac.artid
join sys.columns sc on sc.object_id = a.objid AND sc.column_id = ac.colid
join sys.types sty on sty.user_type_id = sc.user_type_id
where p.pubid = @PublicationId
) [Column] on [Column].object_id = Article.objid AND [Column].column_id = ac.colid
where Publication.pubid = @PublicationId FOR XML AUTO
【讨论】: