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?
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%'
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.
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.
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.
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%'
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
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' )
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