Bonjour,

Comment insérer plusieurs lignes avec un seul ordre INSERT dans une table comportant juste une colonne identity ?

Pour insérer une ligne, c'est facile :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
INSERT INTO LA_TABLE DEFAULT VALUES
Mais je voudrais pouvoir faire des insertions ensemblistes et non itératives...

Un exemple concret avec le DDL suivant qui comprend la table posant problème (T_NATIONALITE_NAT), une table qui la référence (T_NATIONALITE_LNG_NAL) et une vue qui fait la jointure des deux (V_NATIONALITE_VNT) :
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
CREATE TABLE [dbo].[T_NATIONALITE_NAT](
    [NAT_ID] [int] IDENTITY(1,1) NOT NULL,
PRIMARY KEY CLUSTERED 
(
    [NAT_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
 
GO
 
CREATE TABLE [dbo].[T_NATIONALITE_LNG_NAL](
    [NAT_ID] [int] NOT NULL,
    [LNG_ID] [tinyint] NOT NULL,
    [NAL_LIB] [varchar](50) NOT NULL,
PRIMARY KEY CLUSTERED 
(
    [NAT_ID] ASC,
    [LNG_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
 
GO
 
SET ANSI_PADDING OFF
GO
 
ALTER TABLE [dbo].[T_NATIONALITE_LNG_NAL]  WITH CHECK ADD  CONSTRAINT [FK_T_NATIONALITE_LNG_NAL_LNG_ID] FOREIGN KEY([LNG_ID])
REFERENCES [dbo].[T_LANGUAGE_LNG] ([LNG_ID])
GO
 
ALTER TABLE [dbo].[T_NATIONALITE_LNG_NAL] CHECK CONSTRAINT [FK_T_NATIONALITE_LNG_NAL_LNG_ID]
GO
 
ALTER TABLE [dbo].[T_NATIONALITE_LNG_NAL]  WITH CHECK ADD  CONSTRAINT [FK_T_NATIONALITE_LNG_NAL_NAT_ID] FOREIGN KEY([NAT_ID])
REFERENCES [dbo].[T_NATIONALITE_NAT] ([NAT_ID])
GO
 
ALTER TABLE [dbo].[T_NATIONALITE_LNG_NAL] CHECK CONSTRAINT [FK_T_NATIONALITE_LNG_NAL_NAT_ID]
GO
 
CREATE VIEW [dbo].[V_NATIONALITE_VNT]
AS
SELECT
        NAT.NAT_ID,
        LNG_ID,
        NAL_LIB
FROM
        DBO.T_NATIONALITE_NAT NAT
            INNER JOIN DBO.T_NATIONALITE_LNG_NAL NAL
                ON    NAT.NAT_ID = NAL.NAT_ID
GO
L'idée est donc de placer un trigger instead of insert et update sur la vue pour permettre d'effectuer les insertions et mises à jour correctement (qui à priori ne devraient pas être nombreuses, je vous l'accorde).

Mais je bloque sur l'instruction à utiliser pour insérer de manière ensembliste dans la table dont le suffixe est NAT...