Comment puis-je insérer plusieurs lignes SANS répéter le “INSERT INTO dbo.Bla” la partie de la déclaration?
Je sais que j'ai fait ça avant, il y a des années, mais je ne me souviens plus de la syntaxe, et je ne peux pas le trouver n'importe où en raison de l'arrachage des tonnes d'aider les docs et des articles sur les "importations en bloc".
Voici ce que je veux faire, mais la syntaxe n'est pas tout à fait exact... s'il vous plaît, quelqu'un qui a fait cela avant, m'aider 🙂
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally')
Je sais que c'est près à droite de la syntaxe. J'ai peut-être besoin de la parole "en VRAC" dans les il y, ou de quelque chose, je ne me souviens pas. Une idée?
J'en ai besoin pour un Serveur SQL server 2005 bases de données. 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 Incorrect syntax near the keyword 'VALUES'.
- Votre code ci-dessus est fine juste besoin d'ajouter ',' après la déclaration de valeurs de
- INSERT INTO @blah (ID, Nom), les VALEURS (123, 'Timmy'), les VALEURS (124, 'Jonny'), les VALEURS (125, 'Sally')
- Juste une mise en garde: vous pouvez insérer jusqu'à 1000 lignes seulement par cette méthode. INSERT INTO #Test (LWPurchaseOrderID )VALUES ( 935791 ), ( 935933 )
- 2005 n'est plus supporté. Pour 2008, 2012 et 2016, vous pouvez l'utiliser presque ce que vous mettez
INSERT INTO @blah (ID, Name) VALUES (123, 'Timmy'), (124, 'Jonny'), (125, 'Sally')
"VALEURS" n'apparaît qu'une fois et vous avez besoin des virgules entre les ensembles.
Vous devez vous connecter pour publier un commentaire.
Pour SQL Server 2008, peut le faire dans l'une des VALEURS de la clause exactement conformément à l'énoncé de votre question (vous avez juste besoin d'ajouter une virgule pour séparer chaque énoncé de valeurs)...
INSERT table (columnlist)
select
vous créer un ensemble avec des colonnes et des lignes, et par la conception de ces lignes peuvent êtreinsert
ed dans une autre table avec une quantité égale de colonnes. Vous pouvez même utiliser un mélange de littéraux et des valeurs. Par exemple, à l'aide deinsert
avecselect 'A', ID from ATable
insérer 'A' dans la première colonne à chaque fois et à la colonne ID de la valeur de la rangée correspondante de ATable dans la deuxième colonne.Votre syntaxe fonctionne presque dans SQL Server 2008 (mais pas dans SQL Server 20051):
1 Lorsque la question a été répondue, il n'était pas évident que la question faisait référence à SQL Server 2005. Je quitte cette réponse ici, car je crois qu'il est toujours d'actualité.
Si vos données sont déjà dans votre base de données que vous pouvez faire:
Si vous avez besoin de coder en dur les données SQL 2008 et les versions ultérieures vous permettent d'effectuer les opérations suivantes...
À l'aide de
INSERT INTO ... VALUES
syntaxe comme dans Daniel Vassallo du répondreil est l'un ennuyeux limitation:
Le moyen le plus facile d'omettre cette limitation est d'utiliser des dérivés de table:
LiveDemo
Cela fonctionne à partir de SQL Server 2008+
C. Specifying multiple values as a derived table in a FROM clause
Vous pouvez faire cela (moche mais ça fonctionne):
Vous pouvez utiliser un syndicat:
Cela semble OK pour SQL Server 2008. Pour SS2005 & plus tôt, vous avez besoin de répéter l'énoncé de VALEURS.
EDIT:: Mon mauvais. Vous devez répéter le 'INSERT INTO' pour chaque ligne de SS2005.
Il serait plus facile à utiliser XML dans SQL Server pour insérer plusieurs lignes sinon ça devient très fastidieux.
Voir l'intégralité de l'article avec le code ici des explications http://www.cyberminds.co.uk/blog/articles/how-to-insert-multiple-rows-in-sql-server.aspx
Copier le code suivant dans sql server pour afficher un exemple.
OU VOUS POUVEZ UTILISER UN AUTRE MOYEN
J'ai été en utilisant les suivantes:
Il va ajouter de dix lignes avec Guid unique pour l'ID et le Nom.
Remarque: ne pas mettre fin à la dernière ligne (10) par';', parce qu'il va jeter erreur: Une fatale erreur de script s'est produite. Syntaxe incorrecte a été rencontré lors de l'analyse d'ALLER.
Correspondant à INSERT (Transact-SQL) (SQL Server 2005), vous ne pouvez pas omettre
INSERT INTO dbo.Blah
et de la spécifier à chaque fois ou utiliser une autre syntaxe, à l'approche,Cela permettra d'obtenir ce que vous demandez au sujet de:
Pour les futurs développeurs, vous pouvez également insérer à partir d'une autre table:
Ou même à partir de plusieurs tables:
Ce travail est très rapide,et efficace en SQL.
Supposons que vous avez de la Table
Sample with 4 column a,b,c,d where a,b,d are int and c column is Varchar(50)
.Vous ne encart de plusieurs enregistrements dans cette table à l'aide de la suite de la requête, sans répéter l'instruction insert,
Aussi Avec C# à l'aide de
SqlBulkCopy bulkcopy = new SqlBulkCopy(con)
Vous pouvez insérer 10 lignes à la fois