代码之家  ›  专栏  ›  技术社区  ›  hgulyan

SQL Server中的syncobj是什么

  •  7
  • hgulyan  · 技术社区  · 14 年前

    当我运行此脚本在 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%' 或者有别的办法?

    谢谢您。

    2 回复  |  直到 5 年前
        1
  •  12
  •   hgulyan    5 年前

    我找到了解决办法。不知道是不是最好的。

    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'
    

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

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

    编辑:

    忘记添加了,同步对象作为视图存储在数据库中,所以如果您需要视图列表,您可能需要像我在问题中所做的那样忽略它们。

    在检查syncobj和我的视图之间的差异时,唯一的区别是 ISSY MSY 列。对于同步对象,它是1,对于其他0。这意味着同步对象视图是由系统创建的。

    另外,我会等一段时间,如果没有人再回答,我会接受我的。

        2
  •  2
  •   kariato    10 年前

    当您创建的复制不包括原始表中的所有字段或其他元数据更改时。如果您从发布中生成脚本,它将向您展示如何创建脚本(请参见下文)。该视图提供一个对象,用于在初始快照期间生成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

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

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

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