Tìm kiếm tên bảng


97

Tôi sử dụng phần sau để tìm kiếm các chuỗi trong các thủ tục được lưu trữ của mình:

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

Có dễ dàng sửa đổi điều trên để nó tìm kiếm tên Bảng trong một db "DBname" cụ thể không?

Câu trả lời:


139

Tôi đang sử dụng cái này và hoạt động tốt

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'

3
Bao gồm cả lượt xem :-)
François Breton

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

cho ý kiến ra đường and is_ms_shipped = 0;dường như không làm được gì nhiều
whytheq

2
Điều duy nhất mà nó thường ẩn là các bảng hỗ trợ sơ đồ cơ sở dữ liệu hoặc chỉ có một. Nó hữu ích hơn khi tìm kiếm các hàm / thủ tục.
RichardTheKiwi,

Tại sao không thêm tên lược đồ? chọn t.schema_id, s.name, t.Name từ DBNAME.sys.tables làm t tham gia bên trong DBNAME.sys.schemas như s trên t.schema_id = s.schema_id trong đó t.name như '% yourtabletosearch%' và is_ms_shipped = 0
Acroneos

10

Nếu bạn muốn xem tất cả các bảng trong tất cả các Cơ sở dữ liệu trên toàn máy chủ và nhận được kết quả, bạn có thể sử dụng thủ tục sp_MSforeachdb không có tài liệu :

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

3
Câu trả lời này là người duy nhất hữu ích nếu bạn không biết được cơ sở dữ liệu một bảng có thể là trong
Matthew

7

Tôi giả sử bạn muốn chuyển tên cơ sở dữ liệu dưới dạng tham số và không chỉ chạy:

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

Nếu vậy, bạn có thể sử dụng SQL động để thêm dbname vào truy vấn:

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;

5

Bạn cũng có thể sử dụng nút Bộ lọc để lọc các bảng có một chuỗi nhất định trong đó. Bạn có thể làm tương tự với các thủ tục và dạng xem được lưu trữ.

nhập mô tả hình ảnh ở đây


4

Thêm vào câu trả lời của @ [RichardTheKiwi].

Bất cứ khi nào tôi tìm kiếm danh sách các bảng, nói chung tôi muốn chọn từ tất cả chúng hoặc xóa chúng. Dưới đây là một tập lệnh tạo các tập lệnh đó cho bạn.

Tập lệnh chọn được tạo cũng thêm cột Tên bảng để bạn biết mình đang xem bảng nào:

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

bạn cũng có thể sử dụng lệnh show.

show tables like '%tableName%'

6
Đây là cú pháp MySQL về một câu hỏi được gắn thẻ sql-server
Mike Guthrie

3

Tôi biết đây là một chủ đề cũ, nhưng nếu bạn thích tìm kiếm không phân biệt chữ hoa chữ thường:

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

2

Tôi muốn đăng một giải pháp đơn giản cho mọi lược đồ bạn có. Nếu bạn đang sử dụng MySQL DB, bạn có thể chỉ cần lấy từ lược đồ của mình tất cả tên của bảng và thêm điều kiện WHERE-LIKE trên đó. Bạn cũng có thể làm điều đó với dòng lệnh thông thường như sau:

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

nơi tables_in_<your_shcema_name>trả về tên SHOW TABLESlệnh của cột .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.