Frage Finden Sie alle Tabellen mit der Spalte mit dem angegebenen Namen - MS SQL Server


Ist es möglich, nach Tabellennamen zu suchen, die Spalten enthalten?

LIKE '%myName%'

?


854
2018-01-31 10:12


Ursprung


Antworten:


Suche Tabellen:

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       c.name LIKE '%MyName%'
ORDER BY    TableName
            ,ColumnName;

Tabellen und Ansichten suchen:

SELECT      COLUMN_NAME AS 'ColumnName'
            ,TABLE_NAME AS  'TableName'
FROM        INFORMATION_SCHEMA.COLUMNS
WHERE       COLUMN_NAME LIKE '%MyName%'
ORDER BY    TableName
            ,ColumnName;

1382
2018-01-31 10:17



Wir können auch die folgende Syntax verwenden:

select * from INFORMATION_SCHEMA.COLUMNS 
where COLUMN_NAME like '%clientid%' 
order by TABLE_NAME

221
2017-10-18 12:45



SQL Server:

SELECT Table_Name, Column_Name 
FROM  INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'YOUR_DATABASE'
AND   COLUMN_NAME LIKE '%YOUR_COLUMN%'

Oracle:

SELECT owner,table_name, column_name 
FROM all_tab_columns 
WHERE column_name like '%YOUR_COLUMN_NAME%'
AND OWNER in ('YOUR_SCHEMA_NAME');
  • SO EINFACH IST DAS!! (SQL, PL / SQL) Ich benutze es die ganze Zeit, um alle Instanzen eines Spaltennamens in einer bestimmten Datenbank (Schema) zu finden.

69
2017-09-22 18:56



Wenn Sie mehr auf Tools von Drittanbietern setzen, gibt es dort viele Optionen wie:

Diese sind sehr nützlich, wenn Ihre Datenbank verschlüsselte Objekte (Sichten, Prozeduren, Funktionen) enthält, da Sie diese nicht einfach mithilfe von Systemtabellen suchen können.


57
2018-04-14 01:06



Das sollte funktionieren:

SELECT name 
FROM sysobjects 
WHERE id IN ( SELECT id 
              FROM syscolumns 
              WHERE name like '%column_name%' )

56
2018-01-31 10:17



select  
        s.[name]            'Schema',
        t.[name]            'Table',
        c.[name]            'Column',
        d.[name]            'Data Type',
        d.[max_length]      'Max Length',
        d.[precision]       'Precision',
        c.[is_identity]     'Is Id',
        c.[is_nullable]     'Is Nullable',
        c.[is_computed]     'Is Computed',
        d.[is_user_defined] 'Is UserDefined',
        t.[modify_date]     'Date Modified',
        t.[create_date]     'Date created'
from        sys.schemas s
inner join  sys.tables  t
on s.schema_id = t.schema_id
inner join  sys.columns c
on t.object_id = c.object_id
inner join  sys.types   d
on c.user_type_id = d.user_type_id
where c.name like '%ColumnName%'

Hier erhalten Sie ein paar zusätzliche Informationen über das Schema, die Tabellen und Spalten, die Sie möglicherweise verwenden, um zusätzliche Bedingungen in Ihrer WHERE-Klausel zum Filtern zu verwenden. Zum Beispiel, wenn Sie nur die Felder sehen wollten, denen Werte hinzugefügt werden müssen

and c.is_nullable = 0

Sie könnten andere Bedingungen hinzufügen, ich fügte auch die Spalten in der SELECT-Klausel in dieser vertikalen Weise hinzu, so dass es einfach war, andere nach Ihren Bedürfnissen neu anzuordnen, zu entfernen, umzubenennen oder hinzuzufügen. Alternativ dazu können Sie mithilfe von T.Name nach Tabellen suchen. Es ist sehr anpassbar.

Genießen.


45
2018-03-27 13:42



Ich weiß nicht, warum so viele von euch vorschlagen, mit zu gehen sys.table with sys.columns Sie können einfach den folgenden Code verwenden:

Select object_name(object_id) as TableName,* from SYS.columns where name LIKE '%MyName%'

oder

Wenn Sie auch einen Schemanamen möchten:

Select * from  INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME LIKE '%MyName%'

37
2017-08-19 14:24



Wenn Sie nur den Tabellennamen möchten, den Sie ausführen können:

select object_name(object_id) from sys.columns
where name like '%received_at%'

Wenn Sie auch den Schema-Namen haben wollen (was Sie in vielen Fällen tun werden, da Sie viele verschiedene Schemas haben werden, und wenn Sie sich nicht jede Tabelle in der Datenbank merken können und wo sie hingehört, kann das nützlich sein):

select OBJECT_SCHEMA_NAME(object_id),object_name(object_id) from sys.columns
where name like '%received_at%'

und schließlich, wenn Sie es in einem schöneren Format wünschen (obwohl das der Code ist, der meiner Meinung nach zu kompliziert für das Schreiben wird):

select concat(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) from sys.columns
where name like '%received_at%'

Beachten Sie, dass Sie auch eine Funktion basierend auf dem erstellen können, was ich habe:

CREATE PROCEDURE usp_tablecheck
--Scan through all tables to identify all tables with columns that have the provided string
--Stephen B
@name nvarchar(200)
AS
SELECT CONCAT(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) AS [Table Name], name AS [Column] FROM sys.columns
WHERE name LIKE CONCAT('%',@name,'%')
ORDER BY [Table Name] ASC, [Column] ASC
GO

Es ist erwähnenswert, dass die Concat-Funktion im Jahr 2012 hinzugefügt wurde. Für 2008r2 und frühere Verwendung + zum Verketten von Strings.

Ich habe den Prozess ein wenig neu formatiert, seit ich das gepostet habe. Es ist jetzt ein bisschen fortgeschrittener, sieht aber viel unordentlicher aus (aber es ist in einem Proc, so dass Sie es nie sehen werden) und es ist besser formatiert.

Diese Version ermöglicht es Ihnen, sie in einer Verwaltungsdatenbank zu haben und dann jede Datenbank zu durchsuchen. Ändern Sie die Deklaration von @db von 'master' (je nachdem, was die Standarddatenbank sein soll) (HINWEIS: Die Verwendung der CONCAT () - Funktion funktioniert nur mit 2012+, es sei denn, Sie ändern die Zeichenkettenverknüpfung zur Verwendung der + Betreiber).

CREATE PROCEDURE [dbo].[usp_tablecheck]
    --Scan through all tables to identify all tables in the specified database with columns that have the provided string
    --Stephen B
    @name nvarchar(200)
    ,@db nvarchar(200) = 'master'
AS
    DECLARE @sql nvarchar(4000) = CONCAT('
        SELECT concat(OBJECT_SCHEMA_NAME(col.object_id,DB_ID(''',@db,''')),''.'',object_name(col.object_id,DB_ID(''',@db,'''))) AS [Table Name]
            ,col.name AS [Column] 
        FROM ',@db,'.sys.columns col
        LEFT JOIN ',@db,'.sys.objects ob 
            ON ob.object_id = col.object_id
        WHERE 
            col.name LIKE CONCAT(''%'',''',@name,''',''%'') 
            AND ob.type =''U''
        ORDER BY [Table Name] ASC
            ,[Column] ASC')
    EXECUTE (@sql)
GO

35
2017-08-27 08:05