7
votes

Comment retourner un identifiant généré automatiquement à l'aide de Slick Plain SQL avec SQL Server

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)})


1 commentaires

Un uppote pour déterminer votre propre problème. :)


3 Réponses :


0
votes

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)
})


0 commentaires

1
votes

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). xxx


0 commentaires

0
votes

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


3 commentaires

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.