OVH Cloud OVH Cloud

Création de trigger sur une vue

3 réponses
Avatar
Agnès
Bonjour,
ma question ca peut etre sembler idiote.
J'ai cr=E9e un trigger sur un table, et en fin de compte il=20
vaut mieux le mettre sur une vue et enlever celui de la=20
table
J'ai donc cr=E9e une vue "TestView", et quand dans sql=20
query analyser je tente d'ajouter un trigger dessus=20
j'obtiens le message d'erreur me disant :=20

Server: Msg 208, Level 16, State 4, Procedure T_TestView,=20
Line 1
Invalid object name 'TestView'.


Voila la syntaxe pour la cr=E9ation du trigger :

CREATE TRIGGER [T_TestView]=20
ON [TestView]
FOR INSERT, UPDATE, DELETE=20
AS
begin=20
exec master..sp_posts 'TestView'=20
end


C'est excatement le nom de ma vue (j'ai tout test=E9 :=20
[dbo].[TestView] ou [dbo].[pubs].[TestView]
j'obtiens toujours l'erreur)

Ce uqi est plus frappant c'est que quand j'ouvre la liste=20
des trigger dans SQL Serveur enterprise manager, par=20
d=E9faut il affiche la syntaxe pour cr=E9er un trigger, et il=20
me met bien :

"CREATE TRIGGER [TRIGGER NAME] ON [dbo].[TestView]=20
FOR INSERT, UPDATE, DELETE=20
AS"

O=F9 est le probl=E8me ?

Merci

3 réponses

Avatar
mordor
Agnès wrote:

> Bonjour,
> ma question ca peut etre sembler idiote.
> J'ai crée un trigger sur un table, et en fin de compte il
> vaut mieux le mettre sur une vue et enlever celui de la
> table
> J'ai donc crée une vue "TestView", et quand dans sql
> query analyser je tente d'ajouter un trigger dessus
> j'obtiens le message d'erreur me disant :
>
> Server: Msg 208, Level 16, State 4, Procedure T_TestView,
> Line 1
> Invalid object name 'TestView'.
>
>
> Voila la syntaxe pour la création du trigger :
>
> CREATE TRIGGER [T_TestView]
> ON [TestView]
> FOR INSERT, UPDATE, DELETE
> AS
> begin
> exec master..sp_posts 'TestView'
> end
>
>
> C'est excatement le nom de ma vue (j'ai tout testé :
> [dbo].[TestView] ou [dbo].[pubs].[TestView]
> j'obtiens toujours l'erreur)
>
> Ce uqi est plus frappant c'est que quand j'ouvre la liste
> des trigger dans SQL Serveur enterprise manager, par
> défaut il affiche la syntaxe pour créer un trigger, et il
> me met bien :
>
> "CREATE TRIGGER [TRIGGER NAME] ON [dbo].[TestView]
> FOR INSERT, UPDATE, DELETE
> AS"
>
> Où est le problème ?
>
> Merci
il faut utiliser "INSTEAD OF" ça devrait mieux marcher...
par exemple :


CREATE TRIGGER [T_TestView]
ON [TestView]
INSTEAD OF INSERT, UPDATE, DELETE
AS
begin
<;;;;;;;;les instructions;;;;;;;;;>
end

Emmanuel PELLEGRIN
Conseil en Informatique
Email : epconseil at free.fr
Avatar
Fred BROUARD
pour créer un trigger en INSERT UPDATE ou DELETE sur une vue,
il faut que cette vue soit "updatable".

Les règles pour qu'une vue le soit sont stricte. Lire :
http://sqlpro.developpez.com/SQL_AZ_7b.html#SCHEMA8

Dans le cas contraire on peut utiliser un trigger INSTEAD OF...

A +

--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

Agnès a écrit:
Bonjour,
ma question ca peut etre sembler idiote.
J'ai crée un trigger sur un table, et en fin de compte il
vaut mieux le mettre sur une vue et enlever celui de la
table
J'ai donc crée une vue "TestView", et quand dans sql
query analyser je tente d'ajouter un trigger dessus
j'obtiens le message d'erreur me disant :

Server: Msg 208, Level 16, State 4, Procedure T_TestView,
Line 1
Invalid object name 'TestView'.


Voila la syntaxe pour la création du trigger :

CREATE TRIGGER [T_TestView]
ON [TestView]
FOR INSERT, UPDATE, DELETE
AS
begin
exec master..sp_posts 'TestView'
end


C'est excatement le nom de ma vue (j'ai tout testé :
[dbo].[TestView] ou [dbo].[pubs].[TestView]
j'obtiens toujours l'erreur)

Ce uqi est plus frappant c'est que quand j'ouvre la liste
des trigger dans SQL Serveur enterprise manager, par
défaut il affiche la syntaxe pour créer un trigger, et il
me met bien :

"CREATE TRIGGER [TRIGGER NAME] ON [dbo].[TestView]
FOR INSERT, UPDATE, DELETE
AS"

Où est le problème ?

Merci


Avatar
Agnès
Merci :)

-----Message d'origine-----
Agnès wrote:

> Bonjour,
> ma question ca peut etre sembler idiote.
> J'ai crée un trigger sur un table, et en fin de


compte il
> vaut mieux le mettre sur une vue et enlever celui de


la
> table
> J'ai donc crée une vue "TestView", et quand dans sql
> query analyser je tente d'ajouter un trigger dessus
> j'obtiens le message d'erreur me disant :
>
> Server: Msg 208, Level 16, State 4, Procedure


T_TestView,
> Line 1
> Invalid object name 'TestView'.
>
>
> Voila la syntaxe pour la création du trigger :
>
> CREATE TRIGGER [T_TestView]
> ON [TestView]
> FOR INSERT, UPDATE, DELETE
> AS
> begin
> exec master..sp_posts 'TestView'
> end
>
>
> C'est excatement le nom de ma vue (j'ai tout testé :
> [dbo].[TestView] ou [dbo].[pubs].[TestView]
> j'obtiens toujours l'erreur)
>
> Ce uqi est plus frappant c'est que quand j'ouvre la


liste
> des trigger dans SQL Serveur enterprise manager, par
> défaut il affiche la syntaxe pour créer un trigger,


et il
> me met bien :
>
> "CREATE TRIGGER [TRIGGER NAME] ON [dbo].[TestView]
> FOR INSERT, UPDATE, DELETE
> AS"
>
> Où est le problème ?
>
> Merci
il faut utiliser "INSTEAD OF" ça devrait mieux marcher...
par exemple :


CREATE TRIGGER [T_TestView]
ON [TestView]
INSTEAD OF INSERT, UPDATE, DELETE
AS
begin
<;;;;;;;;les instructions;;;;;;;;;>
end

Emmanuel PELLEGRIN
Conseil en Informatique
Email : epconseil at free.fr
.