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 du nom "CreatedDate". J'essaie d'identifier tout le schéma de table avec ce champ particulier.

Y a-t-il une requête SQL pour le faire?

32
demandé sur CJBS 2009-08-12 19:35:11

8 réponses

J'interrogerais information_schema-cela a des vues beaucoup plus lisibles que les tables sous-jacentes.

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%create%'
48
répondu Raj More 2009-08-12 19:07:18

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 faire plus de manipulation avec des 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 ApexSQL Search qui est gratuit mais il y en a aussi beaucoup plus (aussi gratuit) sur le marché tel que Red Gate ou SSMS Tool Pack.

6
répondu Dwoolk 2013-06-04 11:13:00
  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 d'autres propriétés de table, mais vous vous référerez aux vues du catalogue d'objets comme sys.tableaux, sys.colonnes etc.

5
répondu Remus Rusanu 2009-08-12 16:56:53

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 cherche "commentaire".

Déposer les signes de pourcentage si vous voulez une correspondance directe.

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

Et lorsque vous voulez rechercher dans StoredProcs après avoir monkeying avec les tables (et que vous 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 aide, je trouve ces deux requêtes extrêmement utiles.

2
répondu Allbite 2010-10-18 21:51:11

Pour moi, je n'ai qu'un accès en lecture pour exécuter des requêtes, donc j'ai souvent besoin d'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 .Des TABLES avec des .Colonnes alors cela ressemblerait à ceci:

 SELECT *
 FROM   INFORMATION_SCHEMA.COLUMNS
 WHERE  columns.COLUMN_NAME like '%your column name here%'
1
répondu UrbanBackpacker 2014-01-21 22:08:06

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
répondu Ardalan Shahgholi 2016-02-16 10:42:27

Même chose mais de manière ANSI

Sélectionner * DE INFORMATION_SCHEMA.TABLE OÙ NOM_DE_ TABLE DANS ( SÉLECTIONNER TABLE_NAME DE INFORMATION_SCHEMA.COLONNE OÙ COLUMN_NAME = 'CreateDate' )

0
répondu Tamil.SQL 2009-08-12 17:10:20

Vous n'avez pas besoin de taper SQL Query pour cela dans SQL Server 2008.

Dans L'Explorateur D'objets SSMS, choisissez les bases de données ou les 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 sur F7), tapez %CreatedDate% dans la zone de texte de recherche, entrez, profitez

0
répondu Gennady Vanin Геннадий Ванин 2010-10-19 01:18:55