2012-10-26 19 views
52

utilizzare il seguente per la ricerca di stringhe nei miei stored procedure:ricerca dei nomi delle tabelle

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

E 'facile da modificare quanto sopra in modo che esso cerca nomi delle tabelle in una specifica db "DBname"?

risposta

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

commentando la linea 'e is_ms_shipped = 0; 'Non sembra che faccia molto – whytheq

+2

L'unica cosa che normalmente nasconde sono le tabelle di supporto dei diagrammi del database, o ce n'è solo una. È più utile quando cerchi funzioni/procedure. – RichardTheKiwi

+0

Perché non aggiungere nomi di schemi? selezionare \t \t t.schema_id, \t \t \t s.name, \t \t \t t.Name da \t \t DBNAME.sys.tables come t join interno \t DBNAME.sys.schemas come s su t.schema_id = s.schema_id dove \t \t t.name come '% yourtabletosearch%' e \t \t \t is_ms_shipped = 0 – Acroneos

5

vi parto dal presupposto vuole passare il nome del database come un parametro e non appena eseguito:

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

Se è così, è possibile utilizzare SQL dinamico per aggiungere il dbname alla query:

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; 
46

sto usando questo e funziona bene

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

Include vista troppo :-) –

+0

Meglio del Accep risposta –

2

Aggiunta alla risposta di @ [RichardTheKiwi].

Ogni volta che cerco un elenco di tabelle, in generale desidero selezionarle tutte o eliminarle. Di seguito è riportato uno script che genera questi script per te.

Il selezionare script generato aggiunge anche una colonna tableName modo da sapere cosa tavolo si sta guardando:

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; 
2

è anche possibile utilizzare il comando show.

show tables like '%tableName%' 
+2

Questa è la sintassi MySQL su una domanda codificata sql-server –

2

Se si vuole guardare in tutte le tabelle in tutti i database a livello di server e ottenere output che si può fare uso della non documentato sp_MSforeachdb procedura:

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

Questa risposta è l'unica utile se non si conosce il database in cui una tabella potrebbe trovarsi – Matthew

Problemi correlati