Comment puis-je retourner une nouvelle valeur de la colonne IDENTITÉ à partir d'un SQLServer instruction SELECT?
Je suis de l'insérer dans un SQLServer table avec une autoincrementing champ de clé. (Je crois que c'est appelé une colonne d'IDENTITÉ dans SQLServer.)
Dans Oracle, je peux utiliser le RETOUR de mot-clé pour donner mon instruction INSERT un ensemble de résultats comme une requête SELECT qui retourne la valeur générée:
INSERT INTO table
(foreign_key1, value)
VALUES
(9, 'text')
RETURNING key_field INTO :var;
Comment puis-je le faire dans SQLServer?
Bonus: Ok, sympa de réponses, mais comment dois-je les mettre dans une seule instruction, si possible? 🙂
- Ajoutée "un appel" par exemple.
Vous devez vous connecter pour publier un commentaire.
En général, il ne peut pas être fait en une seule instruction.
Mais l'SÉLECTIONNEZ SCOPE_IDENTITY() peut (et doit) être placé directement après l'instruction INSERT, il est donc tout se fait dans la même base de données d'appel.
Exemple:
Vous pouvez utiliser la SORTIE, mais il a quelques limitations, que vous devriez être au courant:
http://msdn.microsoft.com/en-us/library/ms177564.aspx
Edit: en Avoir un pour jouer...
Si seulement le SORTIE clause pris en charge les variables locales.
De toute façon, pour obtenir une gamme de Id plutôt qu'un singleton
Edit 2: En un seul appel. Je n'ai jamais eu l'occasion d'utiliser cette construction.
En plus @@IDENTITY, vous devriez également regarder dans SCOPE_IDENTITY() et IDENT_CURRENT(). Probablement vous voulez SCOPE_IDENTITY(). @@IDENTITY a un problème en ce qu'elle peut renvoyer une valeur d'identité créée dans un trigger sur la table que vous êtes en train de suivre.
Aussi, ce sont de valeur unique de fonctions. Je ne sais pas comment l'Oracle de RETOUR mot clé fonctionne.
SCOPE_IDENTITY
Cela dépend de votre contexte.
Si vous appelez cela de code client, vous pouvez utiliser la SORTIE, puis lire la valeur retournée.
Résultat:
Si vous enchaînez ce dans une procédure stockée, en utilisant la SORTIE est plus de travail. Là, vous aurez envie d'utiliser SCOPE_IDENTITY(), mais vous ne pouvez pas le faire en une seule instruction. Bien sûr, vous pouvez mettre plusieurs instructions sur une seule ligne avec un ';' séparateur, mais ce n'est pas un état unique.
Résultat: @idValue variable contient une valeur d'identité. Utiliser un paramètre de SORTIE pour retourner la valeur.
Vous pouvez utiliser SORTIE EN, qui a l'avantage supplémentaire d'être en mesure de capturer des identités multiples inséré.
INSERT INTO table(foreign_key1, valeur)VALUES(9, 'texte');SELECT @@IDENTITY;