Je sais que je l'ai fait il y a des années, mais je ne me souviens pas de la syntaxe, et je ne la trouve nulle part en raison de la quantité de documents d'aide et d'articles sur les "importations en masse".
Voici ce que je veux faire, mais la syntaxe n'est pas tout à fait correcte ... s'il vous plaît, quelqu'un qui l'a déjà fait, aidez-moi :)
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally')
Je sais que cela est proche de la bonne syntaxe. Je pourrais avoir besoin du mot "VRAC" là-dedans, ou quelque chose, je ne me souviens pas. Une idée?
J'en ai besoin pour une base de données SQL Server 2005. J'ai essayé ce code, en vain:
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 suis en train Incorrect syntax near the keyword 'VALUES'.
sql-server
tsql
sql-server-2005
insert
Timothy Khouri
la source
la source
INSERT INTO @blah (ID, Name) VALUES (123, 'Timmy'), (124, 'Jonny'), (125, 'Sally')
"VALEURS" n'apparaît qu'une seule fois et vous avez besoin de virgules entre les ensembles.Réponses:
Pour SQL Server 2008, vous pouvez le faire dans une clause VALUES exactement selon l'instruction de votre question (il vous suffit d'ajouter une virgule pour séparer chaque instruction values) ...
la source
INSERT table (columnlist)
select
vous créez un ensemble avec des colonnes et des lignes et, par conception, ces lignes peuvent êtreinsert
éditées dans une autre table avec un nombre égal de colonnes. Vous pouvez même utiliser un mélange de littéraux et de valeurs. Par exemple, l'utilisation deinsert
avecselect 'A', ID from ATable
insère à chaque fois «A» dans la première colonne et la valeur de la colonne ID de la ligne correspondante de ATable dans la deuxième colonne.Votre syntaxe fonctionne presque dans SQL Server 2008 (mais pas dans SQL Server 2005 1 ):
1 Lorsque la question a été répondue, il n'était pas évident qu'elle faisait référence à SQL Server 2005. Je laisse cette réponse ici, car je pense qu'elle est toujours pertinente.
la source
Si vos données sont déjà dans votre base de données, vous pouvez faire:
Si vous avez besoin de coder en dur les données, SQL 2008 et les versions ultérieures vous permettent de faire ce qui suit ...
la source
En utilisant la
INSERT INTO ... VALUES
syntaxe comme dans la réponse de Daniel Vassallo, il y a une limitation ennuyeuse:La façon la plus simple d'omettre cette limitation est d'utiliser une table dérivée comme:
LiveDemo
Cela fonctionnera à partir de SQL Server 2008+
la source
C. Specifying multiple values as a derived table in a FROM clause
Vous pouvez le faire (moche mais ça marche):
la source
Cela permettra d'atteindre ce que vous demandez:
Pour les futurs développeurs, vous pouvez également insérer à partir d'une autre table :
Ou même à partir de plusieurs tables :
la source
Vous pouvez utiliser une union:
la source
Cela semble OK pour SQL Server 2008. Pour SS2005 et versions antérieures, vous devez répéter l'instruction VALUES.
EDIT :: Mon mauvais. Vous devez répéter 'INSERT INTO' pour chaque ligne dans SS2005.
la source
Il serait plus facile d'utiliser XML dans SQL Server pour insérer plusieurs lignes sinon cela devient très fastidieux.
Voir l'article complet avec des explications de code ici http://www.cyberminds.co.uk/blog/articles/how-to-insert-multiple-rows-in-sql-server.aspx
Copiez le code suivant sur le serveur SQL pour afficher un exemple.
la source
OU VOUS POUVEZ UTILISER UNE AUTRE FAÇON
la source
J'utilise les éléments suivants:
Il ajoutera dix lignes avec des GUID uniques pour l'ID et le nom.
Remarque: ne terminez pas la dernière ligne (GO 10) par ';' car il générera une erreur: une erreur de script fatale s'est produite. Une syntaxe incorrecte a été rencontrée lors de l'analyse de GO.
la source
Correspondant à INSERT (Transact-SQL) (SQL Server 2005), vous ne pouvez pas omettre
INSERT INTO dbo.Blah
et devez le spécifier à chaque fois ou utiliser une autre syntaxe / approche,la source
Cela fonctionne très rapidement et efficacement en SQL. Supposons que vous ayez Table
Sample with 4 column a,b,c,d where a,b,d are int and c column is Varchar(50)
.Donc, vous ne pouvez pas insérer plusieurs enregistrements dans ce tableau en utilisant la requête suivante sans répéter l'instruction d'insertion,
Aussi avec C # en utilisant
SqlBulkCopy bulkcopy = new SqlBulkCopy(con)
Vous pouvez insérer 10 lignes à la fois
la source
Dans une insertion multitable, vous insérez des lignes calculées dérivées des lignes renvoyées par l'évaluation d'une sous-requête dans une ou plusieurs tables.
INSERT ALL inconditionnel : - Pour ajouter plusieurs lignes à une table à la fois, vous utilisez la forme suivante de l'instruction INSERT:
Spécifiez ALL suivi de plusieurs insert_into_clauses pour effectuer une insertion multitable inconditionnelle. Oracle Database exécute chaque insert_into_clause une fois pour chaque ligne renvoyée par la sous-requête.
Requête d'insertion sur une seule ligne
la source
D'autres ici ont suggéré quelques syntaxes multi-enregistrements. Pour exposer cela, je vous suggère d'insérer d'abord dans une table temporaire et d'insérer votre table principale à partir de là.
La raison en est que le chargement des données à partir d'une requête peut prendre plus de temps et vous pouvez finir par verrouiller la table ou les pages plus longtemps que nécessaire, ce qui ralentit les autres requêtes s'exécutant sur cette table.
De plus, vos identifiants devraient probablement être des identités (1,1) et vous ne devriez probablement pas les insérer, dans la grande majorité des cas. Laissez SQL décider de ces choses pour vous.
la source