วิธีที่ดีที่สุดในการรับชื่อของตารางทั้งหมดในฐานข้อมูลเฉพาะบน SQL Server คืออะไร
SHOW TABLES
(ที่ใช้ใน MySQL) ทำงานหรือไม่
วิธีที่ดีที่สุดในการรับชื่อของตารางทั้งหมดในฐานข้อมูลเฉพาะบน SQL Server คืออะไร
SHOW TABLES
(ที่ใช้ใน MySQL) ทำงานหรือไม่
คำตอบ:
SQL Server 2000, 2005, 2008, 2012, 2014, 2016, 2017 หรือ 2019:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
เพื่อแสดงเฉพาะตารางจากฐานข้อมูลเฉพาะ
SELECT TABLE_NAME
FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
หรือ,
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_CATALOG='dbName' --(for MySql, use: TABLE_SCHEMA='dbName' )
PS: สำหรับ SQL Server 2000:
SELECT * FROM sysobjects WHERE xtype='U'
WHERE TABLE_TYPE='BASE TABLE'
จะรวมเฉพาะตารางฐาน (และตามส่วนขยายที่คุณสามารถใช้ได้เสมอWHERE TABLE_TYPE != 'VIEW'
)
AND name <> 'sysdiagrams'
เป็นตารางปกติคุณมักจะมีการยกเว้นได้ด้วยตนเองด้วย
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
นี่คือรายการประเภทวัตถุอื่น ๆ ที่คุณสามารถค้นหาได้เช่นกัน:
SELECT name FROM sysobjects WHERE xtype = 'U'
จะทำในสิ่งเดียวกัน
'U'
ถูกนำมาใช้เพื่อระบุตารางผู้ใช้ ... ซึ่งตรงข้ามกับ'UT'
หรืออาจเป็นเรื่องที่เข้าใจได้ง่ายที่สุด'T'
... เอาละงานนี้!
USE YourDBName
GO
SELECT *
FROM sys.Tables
GO
หรือ
USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES
GO
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'
SQL Server 2012
exec sp_msforeachtable 'print ''?'''
SELECT name
FROM sysobjects
WHERE xtype='U'
ORDER BY name;
(มาตรฐาน SQL Server 2000 ยังคงสนับสนุนใน SQL Server 2005)
select * from sysobjects where xtype='U'
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
SELECT name FROM sysobjects WHERE xtype='U' AND name <> 'sysdiagrams';
เนื่องจากตาราง sysdiagrams ที่สร้างโดย Microsoft SQL Server Management Studio นั้นไม่ใช่ทางเทคนิคในตารางระบบ แต่อย่างใดอย่างหนึ่งที่เรามักจะต้องการยกเว้นอยู่แล้ว
ข้อเสียของINFORMATION_SCHEMA.TABLES
มันคือมันยังรวมถึงตารางระบบเช่นdtproperties
และMSpeer_...
ตารางโดยไม่มีวิธีที่จะบอกพวกเขานอกเหนือจากตารางของคุณเอง
ฉันขอแนะนำให้ใช้sys.objects
(เวอร์ชันใหม่ของมุมมองsysobjects ที่เลิกใช้แล้ว ) ซึ่งรองรับการยกเว้นตารางระบบ:
select *
from sys.objects
where type = 'U' -- User tables
and is_ms_shipped = 0 -- Exclude system tables
ใน SSMS เพื่อรับชื่อตารางแบบเต็มทั้งหมดในฐานข้อมูลเฉพาะ (เช่น "MyDatabase"):
SELECT [TABLE_CATALOG] + '.' + [TABLE_SCHEMA] + '.' + [TABLE_NAME]
FROM MyDatabase.INFORMATION_SCHEMA.Tables
WHERE [TABLE_TYPE] = 'BASE TABLE' and [TABLE_NAME] <> 'sysdiagrams'
ORDER BY [TABLE_SCHEMA], [TABLE_NAME]
ผล:
โปรดใช้สิ่งนี้ คุณจะได้รับชื่อตารางพร้อมกับชื่อสคีมา:
SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
ORDER BY TABLE_NAME
ขอบคุณ Ray Vega ที่คำตอบให้ตารางผู้ใช้ทั้งหมดในฐานข้อมูล ...
exec sp_msforeachtable 'พิมพ์' '?' ''
sp_helptext แสดงแบบสอบถามพื้นฐานซึ่งสรุปไปที่ ...
select * from dbo.sysobjects o
join sys.all_objects syso on o.id = syso.object_id
where OBJECTPROPERTY(o.id, 'IsUserTable') = 1
and o.category & 2 = 0
คุณสามารถใช้sys.objectsเพื่อรับวัตถุฐานข้อมูลทั้งหมด
GO
select * from sys.objects where type_desc='USER_TABLE' order by name
GO
หรือ
-- For all tables
select * from INFORMATION_SCHEMA.TABLES
GO
--- For user defined tables
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='BASE TABLE'
GO
--- For Views
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='VIEW'
GO
การใช้SELECT * FROM INFORMATION_SCHEMA.COLUMNS
แสดงตารางและคอลัมน์ทั้งหมดที่เกี่ยวข้องด้วย