web-dev-qa-db-fra.com

Requête SQL pour rechercher le schéma de toutes les tables

Je travaille sur une base de données SQL Server 2008 qui contient de nombreuses tables (environ 200). Beaucoup de ces tables contiennent un champ nommé "CreatedDate". J'essaye d'identifier tout le schéma de table avec ce champ particulier.

Existe-t-il une requête SQL pour ce faire?

35
pencilslate

Je voudrais interroger le schéma_information - cela a des vues qui sont beaucoup plus lisibles que les tables sous-jacentes.

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%create%'
51
Raj More

Vous pouvez également essayer de le faire en utilisant l'un des nombreux outils tiers disponibles pour cela.

Les requêtes sont idéales pour les recherches simples, mais si vous avez besoin de manipuler davantage les données, recherchez des références et c'est là que vous pouvez faire un bien meilleur travail avec celles-ci.

En outre, ceux-ci sont très utiles lorsque certains objets sont cryptés et que vous devez rechercher

J'utilise Recherche ApexSQL qui est gratuit mais il y en a aussi beaucoup d'autres (également gratuits) sur le marché tels que Red Gate ou SSMS Tool Pack.

6
Dwoolk
  select object_name(c.object_id) as table_name
    , schema_name(t.schema_id) as schema_name
    from sys.columns c
    join sys.tables t on c.object_id = t.object_id
     where c.name=N'CreatedDate';

Cela devient un peu plus compliqué si vous voulez également d'autres propriétés de table, mais vous vous référerez aux vues de catalogue d'objets comme sys.tables , sys.columns etc.

5
Remus Rusanu

Mon préféré...

SELECT objParent.name AS parent, obj.name, col.*
FROM sysobjects obj 
    LEFT JOIN syscolumns col
        ON obj.id = col.id
    LEFT JOIN sysobjects objParent
        ON objParent.id = obj.parent_obj
WHERE col.name LIKE '%Comment%'
   OR obj.name LIKE '%Comment%'

Ci-dessus, je recherche "Commentaire".

Supprimez les signes de pourcentage si vous voulez une correspondance directe.

Cela recherche des tables, des champs et des choses comme les noms de clés primaires, les contraintes, les vues, etc.

Et lorsque vous souhaitez rechercher dans StoredProcs après avoir effectué une monkeying avec les tables (et devez faire correspondre les procs), utilisez ce qui suit ...

SELECT name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Comment%'

J'espère que cela vous aidera, je trouve ces deux requêtes extrêmement utiles.

2
Allbite

Utilisez cette requête:

SELECT 
    t.name AS table_name,
    SCHEMA_NAME(schema_id) AS schema_name,
    c.name AS column_name , *
FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
Where 
    ( c.name LIKE '%' + '<ColumnName>' + '%' )
    AND 
    ( t.type = 'U' ) -- Use This To Prevent Selecting System Tables
1
Ardalan Shahgholi

Pour moi, je n'ai qu'un accès en lecture pour exécuter des requêtes, je dois donc souvent utiliser cette fonction, voici ce que j'utilise:

SELECT  *
FROM    INFORMATION_SCHEMA.TABLES
where   TABLES.TABLE_NAME like '%your table name here%'

Vous pouvez remplacer .TABLES par .COLUMNS alors cela ressemblerait à ceci:

 SELECT *
 FROM   INFORMATION_SCHEMA.COLUMNS
 WHERE  columns.COLUMN_NAME like '%your column name here%'
1
UrbanBackpacker

Même chose mais de façon ANSI

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'CreateDate')

0
Tamil.SQL

Vous n'avez pas besoin de taper la requête SQL pour cela dans SQL Server 2008.

Dans l'Explorateur d'objets SSMS, choisissez Bases de données ou tables de la base de données requise (si vous devez rechercher dans une base de données), ouvrez le menu Affichage -> Détails de l'explorateur d'objets (appuyez également sur F7), tapez% CreatedDate% dans la zone de texte Rechercher, ENTRER, profitez