一尘不染

什么是SQL Server中的syncobj

sql

当我运行此脚本以搜索特定文本时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%'其他方式一样将它们从查询中删除吗?

谢谢你。


阅读 281

收藏
2021-03-10

共1个答案

一尘不染

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

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视图是由系统创建的。

附言:我将等待一段时间,如果没有人提供其他答案,我会接受我的。

2021-03-10