Comment puis-je modifier les valeurs d'une INSERTION dans un trigger sur SQL Server?

J'ai la table Tb

ID | Name   | Desc
-------------------------
 1 | Sample | sample desc

Je veux créer un trigger sur INSERT qui permet de changer la valeur de l'insertion Desc, par exemple:

INSERT INTO Tb(Name, Desc) VALUES ('x', 'y')

Entraînera

ID | Name   | Desc
-------------------------
 1 | Sample | sample desc
 2 | x      | Y edited

Dans l'exemple ci-dessus j'ai eu la valeur de l'insertion Desc changé en majuscules et ajouté edited sur la fin.

C'est ce dont j'ai besoin, obtenir l' Desc en cours d'insertion et de le modifier.

Comment puis-je le faire?

Est-il préférable de le gérer après l'insertion avec une mise à jour? Ou faire un déclencheur INSTEAD OF INSERT et de le modifier à chaque fois le tableau des modifications de la structure?

  • Ne pouvez-vous pas faire cela d'une manière différente? Personnellement, je déteste quand je vois des choses bizarres qui se passe sur les données, et j'ai finalement se rendre compte qu'un fantôme de déclenchement a été fait certains trucs
  • Je vais l'utiliser pour résoudre un problème qui relève d'un code je n'ai pas accès. Il insère le url d'un article, mais elle ne supprime pas les accents et les caractères spéciaux, je vais faire un déclencheur de le faire pour moi.
  • Ce n'est pas un concept difficile et cela dépasse mon esprit que Microsoft ne peut pas fournir ces fonctionnalités simples comme dans Oracle, où vous pouvez modifier toutes les valeurs avant de les insérer en modifiant le :de NOUVELLES valeurs. c'est à dire si je veux toujours jeté les noms d'utilisateur à la partie supérieure avant de les insérer (en supposant que je ne peux pas le faire dans le code pour une raison quelconque), vous pourriez avoir un avant déclencheur d'insertion qui ne :NOUVEAU.nom d'utilisateur := MAJUSCULE(:NOUVEAU.nom d'utilisateur). Dans SQL Server, vous ne pouvez pas faire l'équivalent avec les valeurs de l'insertion de la table temporaire, et que c'est vraiment nul.
  • Oui, vous le pouvez. Dans l'au lieu de déclencher, il suffit d'exécuter une instruction insert qui sélectionne toutes les colonnes de la table insérée dans la table réelle, mais de modifier l'sélectionnez la colonne que vous voulez faire de la supérieure. Par exemple, dans le déclencheur instead of insert, il suffit d'exécuter une instruction comme insert into Table (a,b,c) select a, ToUpper(b), c from inserted. Microsoft tech coups oracle hors de l'eau.
InformationsquelleAutor BrunoLM | 2010-08-26