web-dev-qa-db-fra.com

Comment puis-je savoir quelle procédure ou la gâchette stockée utilise une table sur SQL Server 2008 R2?

C'est le cas que dans la base de données que je vérifie, il existe une table d'archives qui conserve l'historique des utilisateurs, et il existe une procédure de déclenchement ou de stockage qui, après quelques lignes de suppression de temps de cette table, afin d'éviter le surdimensionné de la même, je n'ai conçu pas la DB, je ne fais que prendre le maintien d'une application qui utilise cette base de données, donc je ne connais donc pas le nom de ces procédures ou déclencheurs stockés, ce que je veux faire, c'est localiser cette procédure stockée. ou déclencher, vérifiez le code et modifiez-le pour laisser cet "historique de l'utilisateur" plus longtemps sur la table.

Quelqu'un m'a dit de vérifier la table "SysObjects", où je peux réellement voir quelque chose avec le même nom de la table, mais c'est la seule information que j'ai pu récupérer, tout conseiller?

Merci.

9
farp332

Recherchez tous les codes à l'aide de sys.sql_modules

SELECT OBJECT_NAME(object_id)
FROM sys.sql_modules sm
WHERE definition LIKE '%Mytable%'

Ou utiliser Red Gate SQL Search qui est totalement libre

Ne pas Utilisez des syscommentes ou des informations_schema.RuBish

6
gbn

Essayez recherche apexsql

Apexsql Recherche est un Studio SQL Server Gestion Studio et Visual Studio STUDIO qui, entre autres fonctionnalités, possède la fonction de dépendances de la vue. La fonctionnalité View Dépendances a la possibilité de visualiser tous les relations d'objets de base de données SQL, y compris ceux entre des objets cryptés et système, des objets spécifiques SQL Server 2012 et des objets stockés dans des bases de données cryptées avec le cryptage de données transparent (TDE).

La fonction de dépendances de la vue vous permet également de configurer et de personnaliser la disposition de diagramme de dépendances visuelles, y compris les relations qui seront présentées, la mise en page et la taille du diagramme généré et la profondeur de forage des dépendances

Disclaimer: je travaille pour apexsql en tant qu'ingénieur de support

4
Milica Medic

Pour une référence future à partir de 2008, il existe également un DMV qui peut être utilisé. sys.dm_sql_referencing_entities. Je préfère généralement qu'il utilise SQL_Modules car cela évite les faux positifs entre autres choses. J'en ai discuté ici mais essentiellement si vous avez un morceau de code comme celui-ci:

SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id) 
FROM sys.sql_modules WHERE [definition] LIKE '%ABC%'

Vous finirez par des résultats pour la table ABC, la table ABCLOG L'affichage VW_ABC, la procédure stockée sp_update_abc, etc. également au meilleur de mes connaissances, le DMV gérera les SP cryptés ainsi que non crypté, tandis que la méthode SQL_MODULES ne fonctionne qu'avec SPS non crypté. .

La version DMV de la même requête est la suivante:

SELECT * FROM sys.dm_sql_referencing_entities('dbo.ABC', 'OBJECT')
2
Kenneth Fisher

Aussi, vous pouvez utiliser la vue -- sys.sql_expression_dependances Catalogue. Utilisez cette requête:

SELECT 
referencing_object_name = obj.name, 
referencing_object_type_desc = obj.type_desc, 
referenced_object_name = referenced_entity_name
FROM sys.sql_expression_dependencies sd 
INNER JOIN sys.objects obj 
ON sd.referencing_id = obj.[object_id] 
WHERE referenced_entity_name = 'MyTable'
1
Milica Medic