2009-01-28 10 views

Répondre

2

Eh bien, je pense que vous devez utiliser un déclencheur INSTEAD OF sur la vue de telle sorte que la table de base est mis à jour directement pas.

Voici un article qui les explique. Article

Un autre exemple. Exemple de code ci-dessous. Article2

échantillon (bien sûr, vous devez modifier ceci pour adapter votre point de vue.)

CREATE TRIGGER tr_Employees_U on Employees FOR UPDATE AS 
    IF UPDATE(lastname) 
    BEGIN 
     RAISERROR ('cannot change lastname', 16, 1) 
     ROLLBACK TRAN 
     RETURN 
    END 
GO 

Utilisez le déclencheur soit:

1) erreur de ils essaient de mettre à jour cette colonne

2) il suffit de ne pas mettre à jour cette colonne

Ensuite, vous devriez être ensemble.

+0

Parfait, je vais l'utiliser. Merci –

1

Je sais que c'est une question ancienne, mais je l'ai parcouru en cherchant dans les archives et j'ai (je pense) une meilleure solution. Les affiches originales ne s'en soucient probablement pas à ce stade, mais cela peut aider quelqu'un d'autre à faire des recherches sur le même problème.

Si vous définissez le champ dans votre vue que vous souhaitez rendre en lecture seule à la suite de certaines opérations, il ne peut pas être mis à jour automatiquement, ce qui est beaucoup moins fastidieux que la création et le maintien d'un déclencheur. Dans mon cas, j'avais une jointure à une table auxiliaire, où je voulais montrer le champ joint, mais je ne laissais personne le changer, car cela changerait pour tous les enregistrements joints, pas seulement pour ceux en cours d'édition. Le champ était un texte simple, nommé Pristup. Tout ce que je faisais était de définir le champ dans la vue comme:

LTrim (přístup) přístup

Cela permet de maintenir le même nom, mais le contenu ne peut pas être changé, indépendamment des autorisations. Simple et efficace.

Questions connexes