2012-11-26 8 views
23

Io lavoro con SQL Server 2008 e ho un database che ha più di 1500 colonne e circa 500 stored procedure e ....Determinare quali oggetti fanno riferimento a una tabella in SQL Server

Voglio rinominare una tabella che ha parecchie relazioni e fa riferimento in molte stored procedure e viste e ....

Come posso ottenere tutti gli elementi nel database che ha una relazione con questa tabella?

Grazie.

risposta

12

Se hai bisogno di trovare oggetti di database (ad esempio tabelle, colonne, trigger) per nome - uno sguardo allo FREE lo strumento Red-Gate chiamato SQL Search che esegue questa operazione: ricerca l'intero database per qualsiasi tipo di stringa.

enter image description here

enter image description here

E 'un grande strumento indispensabile per qualsiasi DBA o database di sviluppatore - l'ho già detto che è assolutamente GRATUITO da utilizzare per qualsiasi tipo di utilizzo ??

+0

@MitchWheat: basta installarlo in SSMS e utilizzare alcune volte - dopo di che, ** non lo si * * dimenticalo più! :-) –

30

Utilizzando sys.dm_sql_referencing_entities:

SELECT 
    referencing_schema_name, referencing_entity_name, referencing_id, 
    referencing_class_desc, is_caller_dependent 
FROM 
    sys.dm_sql_referencing_entities ('mySchemaName.myTableName', 'OBJECT'); 
GO 

dove 'mySchemaName.myTableName' è il vostro schema.table, ad esempio 'dbo.MyTable'

+0

Grazie. Ma cosa sono "mySchemaName" e "OBJECT"? – Tavousi

+2

@Tavousi - Vedi http://msdn.microsoft.com/en-us/library/bb630351.aspx Come puoi vedere, vuoi usare ''OBJECT'' come secondo parametro. Lo schema predefinito in SQL Server è 'dbo', quindi probabilmente è lo schema. – Tobsey

+1

Se questo restituisce in modo imprevisto 0 righe, tenere presente che in SQL Server 2008-2012 sys.dm_sql_referencing_entites richiede il permesso CONTROL sull'oggetto a cui si riferisce l'operazione. Prova a eseguire la query come utente del database con permisison elevati. –

6

È un'altra soluzione che ho trovato. Non è necessario installare alcuno strumento. Basta eseguire su query analyzer.

Use [Database] 
Go 

SELECT 
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID), 
referencing_object_name = o.name, 
referencing_object_type_desc = o.type_desc, 
referenced_schema_name, 
referenced_object_name = referenced_entity_name, 
referenced_object_type_desc = o1.type_desc, 
referenced_server_name, referenced_database_name 
--,sed.* -- Uncomment for all the columns 
FROM 
sys.sql_expression_dependencies sed 
INNER JOIN 
sys.objects o ON sed.referencing_id = o.[object_id] 
LEFT OUTER JOIN 
sys.objects o1 ON sed.referenced_id = o1.[object_id] 
WHERE 
referenced_entity_name = 'SP_Pay_GetData' 
order by referencing_object_name 
+0

perché questa soluzione non viene più votata? –

+0

dare credito dove è dovuto https://blog.sqlauthority.com/2012/12/02/sql-server-find-referenced-or-referencing-object-in-sql-server-using-sys-sql_expression_dependencies/ – cBlaine

Problemi correlati