8

当我运行这个脚本来搜索特定的文本时sys.columns,我得到了很多"dbo.syncobj_0x3934443438443332"类似的行。

SELECT c.name, s.name + '.' + o.name
FROM sys.columns c
INNER JOIN sys.objects  o ON c.object_id=o.object_id
INNER JOIN sys.schemas  s ON o.schema_id=s.schema_id
WHERE c.name LIKE '%text%'

如果我做对了,它们就是复制对象。是这样吗?我可以像把它们从我的查询中扔掉o.name NOT LIKE '%syncobj%'还是有另一种方法?

谢谢你。

4

2 回答 2

13

我找到了解决方案。不知道是不是最好的。

SELECT c.name, s.name + '.' + o.name
FROM sys.columns c
   INNER JOIN sys.objects  o ON c.object_id=o.object_id
   INNER JOIN sys.schemas  s ON o.schema_id=s.schema_id
WHERE c.name LIKE '%text%' AND o.type = 'U'

结果现在很好。正如我所说,syncobj 是复制对象,它们对我们没有意义。它们仅用于复制目的。

http://www.developmentnow.com/g/114_2007_12_0_0_443938/syncobj-views.htm

编辑:

忘了添加,syncobj 以视图的形式存储在数据库中,因此如果您需要视图列表,您可能需要像我在问题中所做的那样忽略它们。

在检查 syncobj 和我的观点之间的差异时,唯一的区别是is_ms_shipped列。syncobj 为 1,其他为 0。这意味着 syncobj 视图是由系统创建的。

PS我会等一段时间,如果没有人给出另一个答案,我会接受我的。

于 2010-05-26T12:31:02.310 回答
2

当您创建不包括原始表中的所有字段或其他元数据更改的复制时。如果您从出版物生成脚本,它将向您展示它是如何创建的(见下文)。该视图提供了一个对象以在初始快照期间生成 bcp 提取。

这是一个例子

-- 添加文章同步对象 exec sp_articleview @publication = N'publication_data', @article = N'tablename', @view_name = N'syncobj_0x4239373642443436', @filter_clause = N'', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1 GO

PS 我最近在删除复制时遇到了一个问题,它未能删除这些,然后您必须手动删除系统视图才能重用复制脚本。给出错误信息

消息 2714,级别 16,状态 3:数据库中已有一个名为“syncobj_0x3437324238353830”的对象。

这导致 bcp 在快照期间失败。

于 2014-04-04T13:52:27.470 回答