561 votes

Insérer plusieurs lignes SANS répéter la partie "INSERT INTO ..." de l'instruction ?

Je sais que je l'ai déjà fait il y a des années, mais je ne me souviens pas de la syntaxe, et je ne la trouve nulle part, même en cherchant des tonnes de documents d'aide et d'articles sur les "importations en masse".

Voici ce que je veux faire, mais la syntaxe n'est pas exactement la bonne... s'il vous plaît, que quelqu'un qui a déjà fait cela m'aide :)

INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
    (124, 'Jonny'),
    (125, 'Sally')

Je sais que c'est fermer à la bonne syntaxe. J'ai peut-être besoin du mot "BULK", ou autre chose, je ne me souviens plus. Une idée ?

J'en ai besoin pour une base de données SQL Server 2005. J'ai essayé ce code, sans succès :

DECLARE @blah TABLE
(
    ID INT NOT NULL PRIMARY KEY,
    Name VARCHAR(100) NOT NULL
)

INSERT INTO @blah (ID, Name)
    VALUES (123, 'Timmy')
    VALUES (124, 'Jonny')
    VALUES (125, 'Sally')

SELECT * FROM @blah

Je reçois Incorrect syntax near the keyword 'VALUES'.

4 votes

Votre code ci-dessus est bien, il faut juste ajouter ',' après la déclaration de valeurs.

4 votes

INSERT INTO @blah (ID, Nom), VALUES (123, 'Timmy'), VALUES (124, 'Jonny'), VALUES (125, 'Sally')

1 votes

Attention : cette méthode permet d'insérer jusqu'à 1000 lignes. INSERT INTO #Test (LWPurchaseOrderID )VALUES ( 935791 ), ( 935933 )

525voto

Daniel Vassallo Points 142049

Votre syntaxe fonctionne presque en SQL Server 2008 (mais pas en SQL Server 2005). 1 ):

CREATE TABLE MyTable (id int, name char(10));

INSERT INTO MyTable (id, name) VALUES (1, 'Bob'), (2, 'Peter'), (3, 'Joe');

SELECT * FROM MyTable;

id |  name
---+---------
1  |  Bob       
2  |  Peter     
3  |  Joe       

1 Lors de la réponse à la question, il n'était pas évident que la question faisait référence à SQL Server 2005. Je laisse cette réponse ici, car je pense qu'elle est toujours pertinente.

0 votes

Fonctionne avec SQL Server 2012

30 votes

Le serveur 2008 n'autorise pas l'insertion de plus de 1000 lignes de cette manière.

0 votes

Est-il possible d'insérer des données dans une table wordpress directement, c'est-à-dire d'insérer des données dans le mysql et de les afficher dans une page wordpress ?

338voto

gbn Points 197263
INSERT INTO dbo.MyTable (ID, Name)
SELECT 123, 'Timmy'
UNION ALL
SELECT 124, 'Jonny'
UNION ALL
SELECT 125, 'Sally'

Pour SQL Server 2008, vous pouvez le faire en une seule clause VALUES. exactement selon l'énoncé de votre question (il suffit d'ajouter une virgule pour séparer chaque énoncé de valeurs)...

0 votes

Je pense qu'il est préférable d'écrire plus laid que moins efficace. Je veux dire la charge inutile du moteur de base de données

10 votes

Est-ce plus efficace que d'utiliser plusieurs instructions INSERT ?

8 votes

@Code Commander : non, en ce sens qu'il est plus long à compiler. Oui, dans la mesure où vous n'avez qu'un seul insert. Mais cela répond à la question : pas de répétition du INSERT table (columnlist)

246voto

George Points 2918

Si vos données sont déjà dans votre base de données, vous pouvez le faire :

INSERT INTO MyTable(ID, Name)
SELECT ID, NAME FROM OtherTable

Si vous devez coder les données en dur, SQL 2008 et les versions ultérieures vous permettent de procéder comme suit...

INSERT INTO MyTable (Name, ID)
VALUES ('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)

15voto

Gopalakrishnan Points 138

Vous pouvez insérer plusieurs lignes à l'aide d'une seule instruction SQL INSERT. Le code ci-dessous fonctionne bien en SQL Server 2008.

DECLARE @blah TABLE
(
    ID INT NOT NULL PRIMARY KEY,
    Name VARCHAR(100) NOT NULL
);

INSERT INTO @blah (ID, Name)
    VALUES(123, 'Timmy'),
    (124, 'Jonny'),
    (125, 'Sally');

SELECT * FROM @blah

14voto

Doug Kelley Points 71

Ça va marcher :

INSERT INTO MyTable
   (Field1,   Field2)
VALUES ('Value1','Value2'),
   ('ValueA', 'ValueB');

parenthèses utilisateur et virgule à la fin de chaque ensemble de valeurs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X