Dapper insert, vérifier l'existence d'un enregistrement

c# dapper

Question

Donc, j'ai utilisé cette méthode pour insérer des enregistrements dans ma base de données:

TransactionBlock.Connection.Execute(
                            "INSERT Table(Item,Id)VALUES(@Item, @Id);
                            new {Item,Id = id }, TransactionBlock.Transaction);

Je dois maintenant modifier ceci, pour vérifier d'abord si l'élément / l'ID est déjà dans la base de données, en utilisant ce qui suit:

const sql = "IF EXISTS (SELECT * FROM Table, où Item = @ Item ... etc etc

mais je ne suis pas tombé sur des exemples de comment y parvenir. Je peux y parvenir en créant une procédure stockée, mais je voudrais essayer et utiliser cette approche.

Réponse acceptée

En supposant que vous utilisez SQL Server et que vous souhaitez uniquement insérer l’enregistrement s’il n’existe pas déjà, le code SQL que vous recherchez est

IF NOT EXISTS (SELECT * FROM Table WHERE Id = @Id) 
    INSERT INTO Table(Item, Id) VALUES(@Item, @Id)

Réponse populaire

INSERT INTO TableName (Item, ID)
SELECT @Item, @Id WHERE NOT EXISTS ( SELECT 1 FROM TableName WHERE Id=@Id )

Cela fonctionnera avec une seule déclaration.

Il convient de noter que selon le SGBD sous-jacent, vous pouvez toujours avoir un conflit - si aucun verrou n'est émis et que de nombreuses insertions se produisent simultanément, vous pouvez vous retrouver dans une condition où l'enregistrement n'existe pas lorsqu'il exécute la sélection. tente l'insertion.

Si vous faites face à une situation où les encarts se produisent rapidement, je vous recommande de vous familiariser avec les éléments suivants:

http://weblogs.sqlteam.com/dang/archive/2009/01/31/UPSERT-Race-Condition-With-MERGE.aspx

Bonne chance!




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi