Bonjour,
J'ai remarqué il y a quelque temps un fonctionnement qui ne me semble pas être bon lorsque l'on fait un update ou du moins pas logique par rapport au fonctionnement attendu d'un update.
J'ai 2 tables, une table source UPDATE_KO_SRC et une table de destination UPDATE_KO_DEST (ne pas tenir compte des colonnes ID qui ne servent pas pour l'exemple) :
IF OBJECT_ID('dbo.UPDATE_KO_DEST') IS NOT NULL
DROP TABLE dbo.UPDATE_KO_DEST
CREATE TABLE UPDATE_KO_DEST
(
ID INT IDENTITY(1, 1)
, KEY_1 INT
, KEY_2 INT
, KEY_3 INT
, LIB VARCHAR(50)
, DATE_EXP DATE
)
IF OBJECT_ID('dbo.UPDATE_KO_SRC') IS NOT NULL
DROP TABLE dbo.UPDATE_KO_SRC
CREATE TABLE dbo.UPDATE_KO_SRC
(
KEY_1 INT
, KEY_2 INT
, KEY_3 INT
, LIB VARCHAR(50)
, DATE_EXP DATE
)
A l'aide d'un mapping, je souhaite mettre à jour les lignes de la table de destination en ne me basant que sur 2 champs de la clef d'unicité (je fais un max pour pouvoir faire évoluer la valeur à mettre à jour, c'est un exemple) :
You do not have permissions to access this page.
INSERT INTO dbo.UPDATE_KO_DEST(KEY_1, KEY_2, KEY_3) VALUES(1, 1, 1)
INSERT INTO dbo.UPDATE_KO_DEST(KEY_1, KEY_2, KEY_3) VALUES(1, 1, 2)
INSERT INTO dbo.UPDATE_KO_DEST(KEY_1, KEY_2, KEY_3) VALUES(2, 1, 1)
INSERT INTO dbo.UPDATE_KO_DEST(KEY_1, KEY_2, KEY_3) VALUES(2, 2, 1)
INSERT INTO dbo.UPDATE_KO_SRC(KEY_1, KEY_2, KEY_3, LIB, DATE_EXP) VALUES(1, 1, 1, 'Lib111', GETDATE())
INSERT INTO dbo.UPDATE_KO_SRC(KEY_1, KEY_2, KEY_3, LIB, DATE_EXP) VALUES(2, 1, 1, 'Lib211', GETDATE() -1)
INSERT INTO dbo.UPDATE_KO_SRC(KEY_1, KEY_2, KEY_3, LIB, DATE_EXP) VALUES(3, 1, 1, 'Lib311', GETDATE() + 3)
SELECT * FROM dbo.UPDATE_KO_SRC
SELECT * FROM dbo.UPDATE_KO_DEST
On obtient donc :
You do not have permissions to access this page.
Si on exécute le mapping, puis à nouveau :
SELECT * FROM dbo.UPDATE_KO_SRC
SELECT * FROM dbo.UPDATE_KO_DEST
On obtient un résultat logique :
You do not have permissions to access this page.
Maintenant, si j'ajoute une nouvelle ligne dans ma table de destination, ligne ayant déjà des données sur le couple (KEY_1, KEY_2) dans la table :
INSERT INTO dbo.UPDATE_KO_DEST(KEY_1, KEY_2, KEY_3) VALUES(1, 1, 3)
SELECT * FROM dbo.UPDATE_KO_DEST
You do not have permissions to access this page.
Si on exécute à nouveau le mapping et la requête :
SELECT * FROM dbo.UPDATE_KO_DEST
On obtient :
You do not have permissions to access this page.
Ce qui implique que la nouvelle ligne n'a pas été mise à jour --> Non respect de la demande d'update.