2010-05-26 162 views
7

syncobj當我運行此腳本來搜索sys.columns特定的文本,我得到了很多"dbo.syncobj_0x3934443438443332"像行。什麼是在SQL Server

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%'或有另一種方式?

謝謝。

回答

11

我已經找到了解決辦法。不知道,如果這是最好的一個。

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的存儲在DB的意見,所以如果你需要的視圖列表,你可能需要忽略它們,因爲我在做我的題。

雖然檢查syncobj和我的意見之間的區別,唯一的區別是is_ms_shipped列。對於syncobj它是1,對於其他0.這意味着syncobj視圖是由系統創建的。

P.S.我會等待一段時間,如果沒有人給出另一個答案,我會接受我的。

+4

+1張貼答案。繼續並接受它。 – 2010-05-27 11:32:12

1

當你創建一個複製不包括所有字段或從原表中的其他元數據進行更改。如果您從出版物中生成腳本,它會告訴您它是如何創建的(見下文)。該視圖提供了一個對象,用於在初始快照期間生成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快照過程中失敗。