2009-03-26 6 views
1

Je crée un déclencheur de niveau serveur dans SQL 2008 pour créer des tables de journalisation et les supprimer. J'ai besoin d'enregistrer la base de données dans laquelle la table a été créée. J'ai d'abord créé une colonne avec une valeur par défaut de db_name(), mais toujours master. Ensuite, j'ai essayé d'utiliser dans ma déclaration d'insertion:Obtenir le nom de la base de données à partir de DDL Trigger

EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(max)') 

Cela a fonctionné pendant un certain temps, mais tout à coup il a commencé maître d'enregistrement pour toutes les créations de table et gouttes quelle que soit la base de données de la table était dans toutes les gouttes de table ont. été fait en utilisant SSMS. Est-ce que quelqu'un sait pourquoi je vois ce comportement? Plus important encore, quelqu'un sait-il comment enregistrer la bonne base de données?

EDIT: J'ai trouvé un article qui me fait penser que ce que je fais est incorrect. Apparemment, vous ne devez capturer que create_table et drop_table à partir d'un trigger de base de données et non à partir d'un trigger sur le serveur. Je voudrais toujours laisser la question ouverte au cas où quelqu'un sait comment contourner cela.

Répondre

2

HI,

Vous avez raison, CREATE TABLE et DROP TABLE événements doivent être enregistrés à partir des triggers DDL qui sont définis au niveau de la base de données. Les déclencheurs au niveau du serveur sont destinés aux événements à l'échelle du serveur, par exemple, lorsqu'une connexion se produit.

Voici un excellent article qui peut vous aider dans vos développements.

http://www.developer.com/db/article.php/3552096

Les détails refence suivants qui peuvent être des événements DDL tirés sur la base de données soit ou étendue du serveur.

http://msdn.microsoft.com/en-us/library/ms189871(SQL.90).aspx Cheers,

+0

Merci pour le lien MSDN. J'ai recherché MSDN pour la liste et n'ai pas pu la localiser. – jhale

+0

De rien, heureux d'être utile. –

Questions connexes