2010-11-19 5 views
0

J'ai une table appelée Événements auxquels je souhaite insérer des informations.Création d'un déclencheur SQL simple

Voici le schéma de la table de l'événement:

create table Evento 
(
    ID int primary key identity(1,1), 
    Fecha datetime not null, 
    Descripcion nvarchar(256) not null, 
    Aplicacion nvarchar(256) not null, 
    Equipo nvarchar(256) not null, 
    Usuario nvarchar(256) not null, 
    Tabla nvarchar(256) not null, 
    Tipo nvarchar(256) not null 
) 

Maintenant, voici le script de déclenchement que je suis en train de créer à chaque fois qu'un nouvel enregistrement est inséré dans la table Compra (achat):

create trigger AuditoriaCompraInsert on Compra for INSERT 
as 
insert into Evento select GETDATE(), CONVERT(varchar(128),i.ID), APP_NAME, 
HOST_NAME, SYSTEM_USER, 'Compra', 'Insert' from inserted i 

Je reçois ces erreurs:

Msg 207, Niveau 16, État 1, procédure AuditoriaCompraInsert, Ligne 3 Invalide nom de colonne 'APP_NAME'. Msg 207, niveau 16, état 1, procédure AuditoriaCompraInsert, ligne 4 non valide nom de colonne 'HOST_NAME'.

Un conseil?

+0

Je vous recommande de toujours inclure une liste de colonnes dans votre INSERT, comme 'INSERT INTO Evento (col1, col2, ...) SELECT ...'. En outre, une colonne varchar() avec des valeurs 'Insert', 'Update', etc. est moins efficace que d'utiliser un caractère char (1) avec une valeur 'I', 'U', etc. –

Répondre

3

HOST_NAME(), etc sont des fonctions. Ajouter la parenthèse.

+0

Merci! C'était le problème. –