ค้นหาชื่อตาราง


102

ฉันใช้สิ่งต่อไปนี้เพื่อค้นหาสตริงในโพรซีเดอร์ที่เก็บไว้ของฉัน:

use DBname
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%xxx%'

การแก้ไขข้างต้นเป็นเรื่องง่ายเพื่อให้ค้นหาชื่อตารางในฐานข้อมูลเฉพาะ "DBname" หรือไม่?

คำตอบ:



87
select name
  from DBname.sys.tables
 where name like '%xxx%'
   and is_ms_shipped = 0; -- << comment out if you really want to see them

การแสดงความคิดเห็นในบรรทัดand is_ms_shipped = 0;ดูเหมือนจะไม่ได้ทำอะไรมากนัก
whytheq

2
สิ่งเดียวที่ปกติจะซ่อนคือตารางรองรับไดอะแกรมฐานข้อมูลหรือมีเพียงตารางเดียว มีประโยชน์มากกว่าเมื่อมองหาฟังก์ชัน / ขั้นตอน
RichardTheKiwi

ทำไมไม่เพิ่มชื่อสคีมา เลือก t.schema_id, s.name, t.Name จาก DBNAME.sys.tables เป็น t ภายในเข้าร่วม DBNAME.sys.schemas เป็น s บน t.schema_id = s.schema_id โดยที่ t.name เช่น '% yourtabletosearch%' และ is_ms_shipped = 0
Acroneos

11

หากคุณต้องการค้นหาในตารางทั้งหมดในฐานข้อมูลทั้งหมดทั้งเซิร์ฟเวอร์และรับเอาต์พุตคุณสามารถใช้โพรซีเดอร์ sp_MSforeachdb ที่ไม่มีเอกสาร:

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''

3
คำตอบนี้มีประโยชน์เพียงข้อเดียวหากคุณไม่ทราบว่าฐานข้อมูลใดที่อาจอยู่ในตาราง
Matthew

7

ฉันสมมติว่าคุณต้องการส่งชื่อฐานข้อมูลเป็นพารามิเตอร์ไม่ใช่แค่เรียกใช้:

SELECT  *
FROM    DBName.sys.tables
WHERE   Name LIKE '%XXX%'

ในกรณีนี้คุณสามารถใช้ไดนามิก SQL เพื่อเพิ่ม dbname ลงในแบบสอบถาม:

DECLARE @DBName NVARCHAR(200) = 'YourDBName',
        @TableName NVARCHAR(200) = 'SomeString';

IF NOT EXISTS (SELECT 1 FROM master.sys.databases WHERE Name = @DBName)
    BEGIN
        PRINT 'DATABASE NOT FOUND';
        RETURN;
    END;

DECLARE @SQL NVARCHAR(MAX) = '  SELECT  Name
                                FROM    ' + QUOTENAME(@DBName) + '.sys.tables
                                WHERE   Name LIKE ''%'' + @Table + ''%''';

EXECUTE SP_EXECUTESQL @SQL, N'@Table NVARCHAR(200)', @TableName;

6

คุณยังสามารถใช้ปุ่มตัวกรองเพื่อกรองตารางที่มีสตริงอยู่ คุณสามารถทำเช่นเดียวกันกับขั้นตอนและมุมมองที่เก็บไว้

ป้อนคำอธิบายภาพที่นี่


4

เพิ่มในคำตอบของ @ [RichardTheKiwi]

เมื่อใดก็ตามที่ฉันค้นหารายการตารางโดยทั่วไปฉันต้องการเลือกจากตารางทั้งหมดหรือลบทิ้ง ด้านล่างนี้คือสคริปต์ที่สร้างสคริปต์เหล่านั้นให้คุณ

สคริปต์การเลือกที่สร้างขึ้นยังเพิ่มคอลัมน์ tableName เพื่อให้คุณทราบว่าคุณกำลังดูตารางใด:

select 'select ''' + name + ''' as TableName, * from ' + name as SelectTable,
'delete from ' + name as DeleteTable
from sys.tables
where name like '%xxxx%'
and is_ms_shipped = 0; 

3

ฉันรู้ว่านี่เป็นกระทู้เก่า แต่ถ้าคุณต้องการค้นหาแบบไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่:

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE Lower(TABLE_NAME) LIKE Lower('%%')

2

คุณยังสามารถใช้คำสั่งแสดง

show tables like '%tableName%'

6
นี่คือไวยากรณ์ MySQL สำหรับคำถามที่ติดแท็ก sql-server
Mike Guthrie

2

ฉันต้องการโพสต์วิธีง่ายๆสำหรับทุกสคีมาที่คุณมี หากคุณใช้ MySQL DB คุณสามารถหาชื่อตารางทั้งหมดจากสคีมาของคุณและเพิ่มเงื่อนไข WHERE-LIKE ลงไปได้ คุณสามารถทำได้ด้วยบรรทัดคำสั่งปกติดังนี้:

SHOW TABLES WHERE tables_in_<your_shcema_name> LIKE '%<table_partial_name>%';

โดยที่tables_in_<your_shcema_name>ส่งกลับชื่อSHOW TABLESคำสั่งของคอลัมน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.