2009-01-14 7 views
1

Les données dans mon DataTable est commeInsérer des données dans SQL Tableau

ID ContactName1 Designation1 ContactName2 Designation2 
1 A    dummy  B   sam 

La structure de table de ma table est

ID ContactName Designation 

Je passe les valeurs dans la procédure stockée comme:

@ContactName1 
@Designation1 

@ContactName2 
@Designation2 

Je veux une seule instruction d'insertion pour insérer les enregistrements.

Comment puis-je y parvenir?

Répondre

2

En supposant que votre ID de clé primaire est définie sur auto-incrément, et votre table a trois champs:

INSERT INTO DataTable (ContactName, Designation) VALUES 
    (@ContactName1, @Designation1), 
    (@ContactName2, @Designation2); 

Selon l'ID réel, si vous ne l'avez pas sur l'auto-augmentation, qui juge du commentaire sur la réponse d'Ivan, vous n'avez pas, vous pouvez réellement l'obtenir en utilisant l'instruction MAX():

SELECT MAX(ID) AS max_id FROM DataTable 
+0

Vous pouvez insérer directement l'instruction SELECT dans l'instruction INSERT si nécessaire. En outre, il devrait être MAX (ID) +1 IMHO. –

+0

Oh oui, comme Cd-MaN mentionne que vous devez absolument incrémenter l'instruction MAX après l'avoir récupérée. Cependant, je l'incrémenterais une fois que vous l'auriez récupéré de la base de données, au lieu de le faire directement dans la requête. Je trouve ces opérations sur la base de données ont tendance à être lent. – David

+0

Cette syntaxe n'est pas prise en charge dans SQL Server avant 2008. –

1

Étant donné qu'il est dans une procédure stockée, pourquoi ça peut vous faire que ce soit un ou deux INSERT déclarations? Clairement, deux déclarations sont triviales.

Certains SGBD vous permettent de lister plusieurs valeurs clauses dans une seule INSERT (@Ivan suggère ceci):

INSERT INTO Table(ID, ContactName, Designation) 
    VALUES(1, @ContactName1, @Designation1) 
    VALUES(1, @ContactName2, @Designation2); 

Je ne suis pas certain si une virgule est nécessaire entre les listes de valeurs. Je ne sais pas non plus si les deux enregistrements dans Table sont autorisés à avoir le même ID, ni comment l'ID est déterminé - il s'agit probablement d'un processus d'auto-incrémentation, et différents SGBD le font différemment aussi.

Si votre SGBD ne prend pas en charge plusieurs clauses VALUES dans une seule instruction INSERT, il est préférable d'accepter deux instructions INSERT. Si l'atomicité est un problème, vous pouvez envisager des transactions - bien que cela ne soit qu'une partie d'une transaction plus importante, ROLLBACK en cas d'erreur, en particulier, serait un problème. Si votre SGBD prend en charge SAVEPOINTS, la procédure peut établir un point de sauvegarde à l'entrée et valider ou annuler le savepoint à la sortie.

0

INSERT INTO nomtable (DONNEZ VALEUR SELON NOMBRE ET DE L'ORDRE PAR VIRGULE SEPARE)

EX: -

INSERT INTO TABLENAME VALUES(1,'INDIA')

EST ICI DEUX COLONNE S.N. & PAYS

Questions connexes