É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.
Vous pouvez insérer directement l'instruction SELECT dans l'instruction INSERT si nécessaire. En outre, il devrait être MAX (ID) +1 IMHO. –
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
Cette syntaxe n'est pas prise en charge dans SQL Server avant 2008. –