Bonjour,

j'ai une vue avec un déclencheur pour insérer dans des tables, dont une table qui a une colonne identity. J'insère des données dans cette table, et je souhaite récupérer la valeur de ces identity dans une clause output. Or, comme vous pouvez le voir dans l'exemple de code complet fourni, je ne récupère pas cet id... Avez-vous une idée, s'il-vous-plait ?

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 
CREATE TABLE My
(
	Id INT IDENTITY(1,1) CONSTRAINT PKMy PRIMARY KEY
);
 
CREATE TABLE MyLabel
(
	Id INT NOT NULL CONSTRAINT FKMyLabel FOREIGN KEY REFERENCES My(Id),
	Label VARCHAR(50) NOT NULL
);
GO
 
CREATE VIEW VMy
AS
	SELECT m.Id, ml.Label
	FROM My m
		INNER JOIN MyLabel ml
			ON ml.Id = m.Id;
GO
 
CREATE TRIGGER iVMY ON VMy
INSTEAD OF INSERT
AS
BEGIN    
	DECLARE @are TABLE (
        Row bigint IDENTITY(1,1) not null primary key,
        Id INT not null
    );
	MERGE INTO My
			USING inserted T
			ON 1 = 0
			WHEN NOT MATCHED THEN
			  INSERT
			  DEFAULT VALUES
			OUTPUT inserted.Id INTO @are;
 
	DECLARE @inserted TABLE (
        Id INT not null,
        Label VARCHAR(55) null
    );
    INSERT INTO @inserted
    SELECT
        ISNULL(i.Id, a.Id),
        i.Label
    FROM (
        SELECT
            Id,
            Label,
            ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Id) AS Row
        FROM
            inserted
    ) i
    LEFT JOIN
        @are a
    ON a.Row = i.Row;
END;
GO
 
CREATE TABLE #TEST
(
	Label VARCHAR(50)
)
 
INSERT INTO #TEST
VALUES ('HOP'), ('POUET'), ('TEST')
 
CREATE TABLE #INSERTED
(
	Id INT,
	Label VARCHAR(50)
)
 
INSERT INTO VMy(Label)
OUTPUT inserted.Id, inserted.Label INTO "#INSERTED"
SELECT	Label
FROM #TEST
 
SELECT *
FROM #INSERTED
Résultat :
Id Label
NULL HOP
NULL POUET
NULL TEST