J'aimerais retourner l'identifiant automatiquement généré à partir d'un insert dans une table SQL Server avec un champ d'identité
Ma première tentative, qui renvoie une seule ligne ou un résultat de la colonne avec l'ID, était d'utiliser le @@ Fonctionnalité d'identité de SQL Server avec mon instruction insertion. P>
IE) P>
val fooId = db.withSession((session: scala.slick.session.Session) => { (sql"""INSERT INTO Foo OUTPUT INSERTED.FooId VALUES ('bar')""").as[Int].first()(session)})
3 Réponses :
Juste un coup dans le noir ... Ajout d'un point-virgule après l'instruction code> insert code> résolvoise le problème?
val fooId = db.withSession((session: scala.slick.session.Session) => { (sql""" INSERT INTO Foo VALUES ('bar'); SELECT @@IDENTITY""").as[Int].first()(session) })
Compte tenu de mon utilisation de SLICK (SQLL SQL) Ce n'est pas vraiment un sujet slick, mais plus d'une question SQL Server.
C'est la solution la plus concise. Il utilise le Fonction de sortie de SQL Server (merci PB). p>
Si j'utilise votre exemple, des erreurs se produisent. Userid est un champ incrémental auto dans ma table MySQL.
sql""" INSERT INTO `table`(`email`) OUTPUT INSERTED.userId VALUES ("theEmailAdress@test.de") """.as[Int].firstOption
J'utilisais MSSQL, pas MySQL. À l'époque, je travaillais avec Plainsql et Slick, il n'y avait pas une solution. Bien que leur pilote MSSQL utilisant leur DSL (non Plainsql) le soutiennent de ce que j'ai lu.
Merci pour la réponse. Enfin, j'ai trouvé un moyen de récupérer l'ID avec Plainsql. Voir ici: Stackoverflow.com/Questtions/22013105/...
Je suis content que vous l'aillez compris.
Un uppote pour déterminer votre propre problème. :)