Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/06/2008, 15h58   #1
Nouveau Membre du Club
 
Inscription : décembre 2003
Messages : 35
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2003
Messages : 35
Points : 32
Points : 32
Par défaut [SQL2K] TRIGGER - Instead of Insert

Je dois faire l'insert d'une table complète vers une autre ayant une clé primaire incrémentée par l'application où les données sont saisies. (pas d'INDENTITY)
J'aimerai générer cette clé par trigger mais j'ai bien l'impression que je vais devoir utiliser les curseurs :-/

Code :
1
2
3
4
5
6
7
8
9
10
11
CREATE TRIGGER TRG_TABLE_A_AUTOINCREMENT
ON TABLE_A
INSTEAD OF INSERT
AS
DECLARE @NEWID INT
BEGIN
SELECT @NEWID = (SELECT ISNULL(MAX(ID), 0)+1 FROM TABLE_A) 
 
INSERT INTO TABLE_A (ID, champ1, champ2)
SELECT @NEWID, champ1, champ2 FROM INSERTED
END
Je pense que je fais fausse route pour deux raisons, le trigger ne s'éxécutera qu'une seule fois même s'il est déclenché par un insert de plusieurs lignes.
Et secondo, l'insert déclenchant le trigger ne passe pas puisqu'il attend une donnée pour la clé primaire.

Si vous pouvez confirmer mes doutes...
buchette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2008, 17h08   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 792
Points : 17 792
vous faites complément fausse route en effet, mais encore plus que vous ne le pensez car l'utilisation du select max + 1 est une abération....

lisez l'article que j'ai écrit à ce sujet :
http://sqlpro.developpez.com/cours/clefs/

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2008, 17h28   #3
Nouveau Membre du Club
 
Inscription : décembre 2003
Messages : 35
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2003
Messages : 35
Points : 32
Points : 32
En effet, je viens de le lire...
Ca faisait un an que j'avais pas fait de TRANSAC-SQL, je suis ultra rouillé !

Je vais le faire avec des curseurs, je vois pas comment faire autrement.
buchette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2008, 17h33   #4
Nouveau Membre du Club
 
Inscription : décembre 2003
Messages : 35
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2003
Messages : 35
Points : 32
Points : 32
Pour le max+1, je suis tout à fait d'accord pour une application en cours d'utilisation.

Dans mon cas cela ne posera pas de problème, car il s'agit de générer de nouvelles clés une seule fois pour une migration Access vers SQLServer et que les bases seront stoppées pour l'occasion.
buchette est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h44.


 
 
 
 
Partenaires

Hébergement Web