Bonjour,
suite à mon post d'hier sans réponse,
je pense avoir isolé mon probleme,
mon trigger ne se déclenche qu'une seule fois
comment le faire pour chaque ligne comme le each row de pl sql ?
Bonjour,
suite à mon post d'hier sans réponse,
je pense avoir isolé mon probleme,
mon trigger ne se déclenche qu'une seule fois
comment le faire pour chaque ligne comme le each row de pl sql ?
Bonjour,
Pour répondre à ta question, l'équivalent SQL Server est le curseur. Il se déclare de la manière suivante :
L'utilisation de curseur est fortement déconseillé car il utilise la mémoire cache efin de remonter le résultat des requêtes. Je pense qu'une bonne analyse de ton besoin pourrait te permettre d'effectuer des requêtes ensemblistes qui sont bien plus efficace.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 DECLARE monCurseur CURSOR FOR SELECT .... FROM ... WHERE ... OPEN monCurseur FETCH NEXT FROM monCurseur INTO ... WHILE @@FETCH_STATUS=0 BEGIN ... FETCH NEXT FROM monCurseur INTO ... END CLOSE monCurseur DEALLOCATE monCurseur
Je vais rechercher ton précédent POST afin d'y répondre.
merci, de la réponse,
je suis étonne que cette fonction n'existe pas à vrai dire mais bon,
un curseur n'est pas envisageable dans mon cas je pense, car je dois charger des fichiers de quelques milliers de lignes, et j'ai bien peur que mon temps de traitement ne soit trop long.
Pour faire simple,
je passai par une table temporaire pour stocker mes info,
j'insere ou update mon client selon le cas et recupere son id (auto incrementé)
pour remplir son adresse associé dans la table adresse par exemple.
Du coup, je ne vois pas trop comment faire, l'id etait pratique et rapide.
je vais essayer d'utiliser SSIS...
importez vos données dans une table tampon et faites deux requêtes ensemblistes :
Puis :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 INSERT INTO matable SELECT MaTabletampon EXCEPT SELECT... FROM MaTable
A +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 UPDATE Matable SET ... FROM Matable INTERSECT SELECT ... FROM MaTableTampon
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
En MS SQL, le trigger réagit sur l'ordre (UPDATE, DELTE ou INSERT) et non sur le nombre de lignes concernées.
Si l'instruction UPDATE concerne 1 seule ligne, le trigger réagit 1 seule fois (la table INSERTED contiendra 1 ligne). Si par contre, l'ordre UPDATE concerne n lignes, le trigger ne réagit qu'une seule fois (car une seule instruction UPDATE) et la table INSERTED contiendra n lignes.
Conclusion : en combinant cette information
En MS SQL, le trigger réagit sur l'ordre (UPDATE, DELTE ou INSERT) et non sur le nombre de lignes concernées.
Si l'instruction UPDATE concerne 1 seule ligne, le trigger réagit 1 seule fois (la table INSERTED contiendra 1 ligne). Si par contre, l'ordre UPDATE concerne n lignes, le trigger ne réagit qu'une seule fois (car une seule instruction UPDATE) et la table INSERTED contiendra n lignes.
+ la requête de SQLPro tu devrais pouvoir faire ce dont tu as besoin
Partager