2010-11-17 5 views
0

Je dois modifier le type de données d'une colonne, mais je ne trouve pas tous les emplacements de la base de données susceptibles de la référencer. Existe-t-il un script ou une application capable de rechercher dans toutes les vues, procédures stockées, fonctions, colonnes calculées de table, etc. dans une base de données et de montrer ce qui se réfère à la colonne? J'utilise SQL Server 2005 Standard.Rechercher une colonne dans la base de données SQL entière

Merci, Aaron

+0

De quel type de données modifiez-vous et à quel type? –

+0

Un problème: Même si vous aviez un tel script, il ne peut en aucun cas couvrir un SQL dynamique (instructions EXEC) ou un SQL ad hoc que votre application pourrait créer. – JohnFx

+0

Je passe d'un bit à un varchar (1). – Aaron

Répondre

5

Vous pouvez toujours vérifier la vue du catalogue sys.columns:

SELECT 
    c.NAME 'Col Name', 
    OBJECT_NAME(c.OBJECT_ID) 'Table Name', 
    t.name 
FROM 
    sys.columns c 
INNER JOIN 
    sys.types t ON c.system_type_id = t.system_type_id 
WHERE 
    c.Name = 'your-column-name-here' 

et sur cette base d'informations, vous pouvez générer les déclarations ALTER pour une base de données:

SELECT 
    'ALTER TABLE dbo.' + OBJECT_NAME(c.OBJECT_ID) + 
    ' ALTER COLUMN ' + c.NAME ' NewDataType NULL' 
FROM 
    sys.columns c 
WHERE 
    c.Name = 'your-column-name-here' 

Cette requête génère un ensemble d'instructions ALTER TABLE .... que vous pouvez ensuite copier dans une fenêtre de requête SSMS et ex écrute. Avertissement: si l'une des colonnes est référencée - dans une relation de clé étrangère, ou s'il existe une contrainte par défaut ou une contrainte de vérification -, cette approche peut échouer. Dans ce cas, vous devez effectuer des étapes supplémentaires pour ces colonnes (par exemple, abandonner les contraintes, etc.)

Mise à jour: Cette opération permet de rechercher les colonnes définies dans les tableaux.

Si vous devez rechercher dans les procédures stockées, vue et ses fonctions ainsi, je recommande fortement l'utilisation excellente de Red-Gate et sans (!!) SQL Search utilitaire - des choses excellentes!

+0

Merci pour votre réponse rapide.Mais est-ce que cette recherche recherche des procédures stockées et des fonctions définies par l'utilisateur? – Aaron

+0

Non, il recherche les colonnes telles qu'elles sont définies dans les tables. –

+0

OK, l'utilitaire Red-Gate est exactement ce dont j'avais besoin. Merci. – Aaron

0

Cette requête vous aidera à trouver la colonne une table et la colonne, il fait référence à -

SELECT OBJECT_NAME(f.parent_object_id) AS [Table], COL_NAME(fc.parent_object_id,fc.parent_column_id) AS [Column], 
OBJECT_NAME (f.referenced_object_id) AS RefTable,  COL_NAME(fc.referenced_object_id,fc.referenced_column_id) AS RefColumn, 
f.name AS FK 

FROM sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS fc 
ON f.OBJECT_ID = fc.constraint_object_id 

WHERE OBJECT_NAME(f.parent_object_id) = '<your table name>' 
AND COL_NAME(fc.parent_object_id,fc.parent_column_id) = '<your column name>' 
2

J'aime utiliser une recherche sans outil complémentaire depuis le logiciel Redgate. Je suis étonné de voir à quel point c'est utile - vous pouvez trouver rapidement toutes les références au texte.

Cette description est de SQL Curry:

Recherche SQL trouve des fragments de texte SQL dans les procédures stockées, des fonctions, des vues et plus et une fois que vous les trouvez, il vous permet rapidement de cliquer et accéder aux objets, partout où ils se trouvent sur vos serveurs. C'est vraiment cool!

Voici le lien: SQL Search

0

Je travaille pour Red Gate et je vois que la recherche SQL comme cela a déjà été mentionné. Content que cela fonctionne pour vous. Un autre outil qui peut spécifiquement répertorier les dépendances de colonnes est l'invite SQL 5, qui sera bientôt disponible. Vous pouvez télécharger la version EA en visitant: http://www.surveymk.com/s.aspx?sm=zDJogAY5rwdIwOX/SqtTCQ%3d%3d et en rejoignant la liste d'accès anticipé. Je vous invitons à l'essayer et faites-moi savoir si cela ne correspond pas à vos besoins. Une autre fonctionnalité intéressante est la possibilité de lister vos objets invalides. En d'autres termes, si vous renommez une colonne et que vous avez une procédure stockée qui fait référence à l'ancienne colonne, elle attirera votre attention sur ce point.

Questions connexes