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