回答
兩個INFORMATION_SCHEMA
和sys
對象都是元數據目錄是在SQL Server中可用。
INFORMATION_SCHEMA
set of views是元數據的ANSI/ISO標準目錄。大多數RDBMS支持大多數INFORMATION_SCHEMA
視圖,並且無論供應商如何,每個視圖都公開基本相同的信息。在SQL Server中,大多數(即使不是全部)INFORMATION_SCHEMA
視圖都是以某種方式返回到sys
表的視圖。
它返回:
CREATE VIEW INFORMATION_SCHEMA.TABLES
AS
SELECT
DB_NAME() AS TABLE_CATALOG,
s.name AS TABLE_SCHEMA,
o.name AS TABLE_NAME,
CASE o.type
WHEN 'U' THEN 'BASE TABLE'
WHEN 'V' THEN 'VIEW'
END AS TABLE_TYPE
FROM
sys.objects o LEFT JOIN sys.schemas s
ON s.schema_id = o.schema_id
WHERE
o.type IN ('U', 'V')
的sys
tables and views是原來的元數據目錄視圖和表格是,據我所知,通過建立在SQL Server中,您可以通過運行查詢,如見下面的視圖定義Sybase(Microsoft購買SQL Server原始代碼庫的供應商)。大多數RDBMS具有一組等效的目錄表,但特定的表名在供應商之間各不相同。在SQL Server中,這些表以及後來添加的動態管理視圖(DMV)是Microsoft爲捕獲系統和用戶使用的數據庫元數據而創建的。
在SQL Server中,由於INFORMATION_SCHEMA
視圖通常指向sys
表,並且由於這些視圖的ISO定義,因此the INFORMATION_SCHEMA
views to not contain all metadata or all objects that you're looking for並不少見。 (就我個人而言,我認爲Aaron在那篇文章中的偏見有點過分,但他可能被這個問題困擾得比我更多,他也可能在比我更復雜的配置數據庫上工作。)
然而,
SELECT OBJECT_DEFINITION(OBJECT_ID('sys.tables'))
返回:
CREATE VIEW sys.tables AS
SELECT o.name, o.object_id, o.principal_id, o.schema_id, o.parent_object_id,
o.type, o.type_desc, o.create_date, o.modify_date,
o.is_ms_shipped, o.is_published, o.is_schema_published,
isnull(ds.indepid, 0) AS lob_data_space_id,
rfs.indepid AS filestream_data_space_id,
o.property AS max_column_id_used,
o.lock_on_bulk_load, o.uses_ansi_nulls, o.is_replicated, o.has_replication_filter,
o.is_merge_published, o.is_sync_tran_subscribed, o.has_unchecked_assembly_data,
lob.intprop AS text_in_row_limit,
o.large_value_types_out_of_row,
o.is_tracked_by_cdc,
o.lock_escalation_option AS lock_escalation,
ts.name AS lock_escalation_desc,
o.is_filetable,
o.is_memory_optimized,
o.durability_option as durability,
d.name as durability_desc
FROM sys.objects$ o
LEFT JOIN sys.sysidxstats lob ON lob.id = o.object_id AND lob.indid <= 1
LEFT JOIN sys.syssingleobjrefs ds ON ds.depid = o.object_id AND ds.class = 8 AND ds.depsubid <= 1 -- SRC_INDEXTOLOBDS
LEFT JOIN sys.syssingleobjrefs rfs ON rfs.depid = o.object_id AND rfs.class = 42 AND rfs.depsubid = 0 -- SRC_OBJTOFSDS
LEFT JOIN sys.syspalvalues ts ON ts.class = 'LEOP' AND ts.value = o.lock_escalation_option
LEFT JOIN sys.syspalvalues d ON d.class = 'DOPT' AND d.value = o.durability_option
WHERE o.type = 'U'
這顯然是回到了很多更詳細的信息,並注意INFORMATION_SCHEMA.TABLES
同時返回用戶表和視圖,而sys.tables
只返回用戶表。
就個人而言,我覺得INFORMATION_SCHEMA
意見更好組織和更容易使用的即席查詢按名稱查找表或列的名字,但也有,你必須去sys
對象表的一些極端情況和在某些情況下,INFORMATION_SCHEMA
視圖中的缺失對象可能會咬你。如果我正在尋找一組可靠和完整的物品,那麼我使用sys
表格(特別是sys.objects
或sys.all_objects
),但那些需要更多工作才能獲得可讀結果。 INFORMATION_SCHEMA
的觀點已經爲你做了很多工作。
INFORMATION_SCHEMA.TABLES視圖允許您獲取有關數據庫中所有表和視圖的信息。默認情況下,它會顯示數據庫中每個表和視圖的這些信息。
請訪問本:包含所有重要的元數據https://www.mssqltips.com/sqlservertutorial/196/informationschematables/
Sys系統表中的數據有關的數據。此數據包含有關表名,列名和數據類型的信息,以便SQL Server可以正確處理查詢並返回結果集。系統表包含有關有效用戶及其權限的信息,因此可以保護數據的安全以及有關SQL Server配置的信息,以便預測和控制系統的行爲。
- 1. 使用SYS或INFORMATION_SCHEMA表發現SQL Server過程默認參數
- 2. 在SQL Server中啓用sys,guest和information_schema用戶
- 3. .htaccess中$ 1 vs%1之間的區別
- 4. INFORMATION_SCHEMA vs sysobjects
- 5. 2個SQL表之間的區別
- 6. SQL Server中的「不爲空」和「<>空」之間的區別?
- 7. SQL Server和ADO.NET中的事務之間的區別?
- 8. Oracle和SQL Server中的NVARCHAR之間的區別?
- 9. SQL Server Compact Edition和真正的SQL Server之間的T-SQL區別?
- 10. 臨時表之間的區別
- 11. 鏈(* iter)vs chain.from_iterable(iter)之間的區別
- 12. VS DataBreakpoints:C和C++之間的區別
- 13. wildfly 8 vs 10之間的區別
- 14. popBackStackImmediate vs popBackStack之間的區別
- 15. $ parent.find(selector)vs $(selector,$ parent)之間的區別?
- 16. 「echo'hello'; ls」vs「echo'hello'&& ls」之間的區別?
- 17. sourceforge SPNEGO vs WAFFLE之間的區別
- 18. Hibernate session.getTransaction()。begin()vs session.beginTransaction()之間的區別
- 19. jquery bind('resize')vs .resize()之間的區別
- 20. window.someRandomVar vs someRandomVar之間的區別
- 21. JRMP vs HTTP之間的區別
- 22. hybris 5.5.1.1 vs 5.5.1.2之間的區別?
- 23. UIView frame.size.width vs frame.width之間的區別
- 24. ffmpeg vs live555之間的區別
- 25. 分離之間的區別。 script.sh VS ./script.sh
- 26. 獲取兩個時間之間的區別對於SQL Server 2012
- 27. SQL Server中這兩個索引之間的區別是什麼?
- 28. SQL Server 2008 R2中ntext和varchar之間的區別
- 29. SQL Server 2008 R2中@@和@之間的區別
- 30. SQL Server中主鍵和唯一索引之間的區別
'information_schema' * views *提供了一個相當標準化的元數據接口。 「sys」表/視圖特定於SQL Server,幷包含更多專有(和完整)信息。我更喜歡前者的基本信息。 –
[SQL Server在目錄視圖,信息模式視圖與DMV之間的區別]的可能重複(https://stackoverflow.com/questions/4195064/sql-server-difference-between-catalog-views-information-schema-views-vs -dmvs) –
@DanGuzman對你沒有任何意義,但那個鏈接的答案是*糟糕的*。 –