테이블 이름 검색


97

다음을 사용하여 저장 프로 시저에서 문자열을 검색합니다.

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

특정 db "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 from DBNAME.sys.tables as t inner join DBNAME.sys.schemas as s on t.schema_id = s.schema_id where t.name like '% yourtabletosearch %'and is_ms_shipped = 0
Acroneos

10

서버 전체 데이터베이스의 모든 테이블을보고 출력을 얻으려면 문서화되지 않은 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;

5

필터 버튼을 사용하여 특정 문자열이 포함 된 테이블을 필터링 할 수도 있습니다. 저장 프로 시저 및 뷰에 대해서도 동일하게 수행 할 수 있습니다.

여기에 이미지 설명 입력


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

가지고있는 모든 스키마에 대한 간단한 솔루션을 게시하고 싶습니다. 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.