2010-05-20 5 views
1

Je reçois la colonne error error media.user et tuid. Avant d'exécuter ceci, je vois que media.user existe et je pense que le coalesce() en tant que tuid résoudrait le problème de tuid.Colonnes non valides sur le déclencheur

Pourquoi ces colonnes sont-elles invalides?

CREATE TRIGGER media_comment_trig_0 ON media_comment AFTER INSERT AS 
INSERT INTO user_incoming_media_comments(recipient, comment) 
     SELECT coalesce(p.author, [media.user]) as tuid, INSERTED.id 
     FROM media 
     JOIN INSERTED ON media.id = INSERTED.media 
     LEFT JOIN media_comment p on p.id=INSERTED.parent 
     WHERE tuid <> INSERTED.author; 

Répondre

4

USER est un mot-clé SQL réservé, vous aurez donc besoin d'écrire comme [media].[user] à la place.

De plus, vous ne pouvez pas utiliser un alias dans la clause WHERE. Vous devrez replacer l'expression complète:

WHERE coalesce(p.author, [media].[user]) <> INSERTED.author; 
+0

C'est pourquoi les mots réservés font de mauvais choix pour les noms d'objets! Serait bien si les gens les corriger dès qu'ils écrivent la première requête et se rendent compte oh c'est mot réservé! – HLGEM

+0

HLGEM: La table n'est pas seulement générée mais la colonne n'était pas un mot de réserve dans sqlite (et je pense que mysql). –

1

La colonne existe-t-elle dans le tableau? COALESCE remplacera une valeur NULL et non une colonne manquante.

De plus, cette [media.user] devrait être les médias. [Utilisateur]

vous devez également répéter dans votre clause WHERE

2

changement [media.user]-[media].[user], le [ et ] Cause SQL Server penser [media.user] est le nom de la colonne et non la table.colonne. De plus, vous devez remplacer WHERE tuid <> INSERTED.author; par WHERE coalesce(p.author, [media].[user]) <> INSERTED.author;. Vous devez répéter le COALESCE et ne pouvez pas utiliser l'alias de colonne dans le WHERE.

Questions connexes