Hello,
Un petit problème particulier...
Soit la DB suivante :
Ensuite, si je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 CREATE SCHEMA S_TEST; GO CREATE TABLE S_TEST.T_TEST_TST( ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, VAL INT NOT NULL ); GO CREATE FUNCTION S_TEST.CK() RETURNS INT AS BEGIN DECLARE @RESULT INT; SELECT @RESULT = SUM(VAL) FROM S_TEST.T_TEST_TST RETURN @RESULT; END GO ALTER TABLE S_TEST.T_TEST_TST WITH CHECK ADD CONSTRAINT CK_SUM_VAL_LOWER_THAN_1000 CHECK (S_TEST.CK() < 1000);
Les lignes du résultat vont avoir les identifiants 1, 2, 3 et 6. A côté de cela, on a bien sûr les messages d'erreur adéquats (2 fois en l'occurence) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 INSERT INTO S_TEST.T_TEST_TST(VAL) VALUES(500) GO INSERT INTO S_TEST.T_TEST_TST(VAL) VALUES(300) GO INSERT INTO S_TEST.T_TEST_TST(VAL) SELECT 100 GO INSERT INTO S_TEST.T_TEST_TST(VAL) SELECT 100 GO INSERT INTO S_TEST.T_TEST_TST(VAL) SELECT 100 GO INSERT INTO S_TEST.T_TEST_TST(VAL) SELECT 10 GO SELECT * FROM S_TEST.T_TEST_TST
Ma question précise est : Comment faire, dans une application (.NET), lorsqu'un ordre sql d'insertion rencontre une erreur du même genre, pour connaître les identifiants qui ont été utilisés ?The INSERT statement conflicted with the CHECK constraint "CK_SUM_VAL_LOWER_THAN_1000". The conflict occurred in database "INNO_ADMIN", table "S_TEST.T_TEST_TST".
Y a-t-il une variable spéciale ou une fonction système qui permettrait de savoir cela ?? Google ne m'est pas d'une grande aide sur ce coup-là
N.B. : Pour mon problème réel, les ordres d'insertion n'ajouteront jamais qu'une seule ligne dans la table mais autant généralisé à des ensembles si possible.
Partager