我注意到,當我查詢dbo.sysobjects時,爲了確定我數據庫中的所有對象,它還會選取名稱以'syncobj_'開頭的所有系統視圖。它們的xtype爲'V',似乎沒有任何方式可以知道這些是系統視圖,除了檢查視圖的名稱外,並不是我自己的。有沒有其他的方法?我想從我正在創建的查詢中排除這些。SQL Server - 查詢sysobjects
回答
IsMSShipped
SQL Server安裝過程中創建的任何架構範圍內的對象
對象。 1 =真0 =假
使用它是這樣的:
SELECT * from sysobjects where OBJECTPROPERTY(ID,N'IsMSShipped') = 0
它的文檔是有點過,但 - 它也幫助你排除其他對象增加了「通過」的SQL Server在以後的日子也 - 例如任何複製相關的對象也被認爲是IsMSShipped
。
試着這麼做:
select *
from sysobjects
where name NOT IN (
select name from sys.system_views
)
實際上可能更好地使用object_id。 'select * from sysobjects 其中id NOT IN( \t從sys.system_views中選擇object_id )' –
記得加入你的表。 select * from sysobjects where id NOT IN(從sys.system_views中選擇object_id,其中sysobjects.id = object_id)或更好,則存在使用。 –
這仍然允許系統表和其他對象通過。 –
由於您使用的是SQL Server 2008,因此幾乎沒有理由繼續使用過時的兼容性視圖sysobjects。您應該使用SQL Server 2005中引入的目錄視圖sys.objects。作爲額外的好處,您不需要爲每一行調用一個外部OBJECTPROPERTY()函數,因爲它包含一個名爲is_ms_shipped的列,它顯示相同的信息。
SELECT OBJECT_SCHEMA_NAME([object_id]), name, type
FROM sys.objects
WHERE is_ms_shipped = 0;
請注意,這仍然會返回一些系統對象,例如dtproperties表(在添加圖表支持到數據庫時添加)不被視爲MS發佈,而是用戶表。 –
- 1. SQL Server - 爲sysobjects返回SCHEMA
- 2. SQL Server 2008 sysobjects位置
- 3. 如何用linq查詢sysobjects?
- 4. SQL:用sysobjects代替sysobjects代碼
- 5. PostgreSQL中SQL Server的sysobjects的替代
- 6. SQL Server查詢
- 7. SQL Server查詢
- 8. SQL Server查詢
- 9. SQL Server查詢
- 10. SQL Server查詢
- 11. SQL Server查詢
- 12. SQL Server查詢
- 13. SQL Server查詢
- 14. SQL Server查詢
- 15. SQL Server查詢?
- 16. SQL Server查詢子查詢
- 17. 總SQL Server查詢
- 18. SQL Server樹查詢
- 19. SQL Server的查詢
- 20. 查詢SQL Server CE
- 21. 的SQL Server查詢
- 22. Xpath SQL Server查詢
- 23. 寫SQL Server查詢
- 24. SQL Server 2008查詢
- 25. SQL Server查詢buildup
- 26. C#SQL Server查詢
- 27. SQL Server 2005查詢
- 28. SQL Server XML查詢
- 29. SQL Server 2014查詢
- 30. Sql Server 2008查詢
你可能想看看這個SO Q/A:您正在使用什麼版本的SQL Server http://stackoverflow.com/questions/2910077/what-is-syncobj-in-sql-server – bzarah
?這可能會影響您獲得的回覆的有效性或質量。例如,如果您在2005+以上,那麼比sysobjects有更好的答案。建議使用確切(或最小)版本標記標籤(例如標籤「sql-server-2008」)。 –
@Aaron - 如果我需要數據庫中所有對象的完整列表,那麼比sysobjects有什麼更好的選擇?我知道我可以使用信息模式視圖,但是我需要查詢其中的十幾個。使用2008. –