2013-05-14 1 views
2

J'ai une table structuré comme,comment puis-je mettre à jour la logique de la table SQL

Table 3 

Fruit ID - Foreign Key (Primary Key of Table 1) 
Crate ID - Foreign Key (Primary Key of Table 2) 

Maintenant je dois exécuter une requête qui sera,

Mise à jourCrate IDdeFruit IDsiFruit IDest déjà dans le tableau, et sinon, insérez l'enregistrement dans le tableau 3 comme nouvel enregistrement.

C'est ce que je suis arrivé dans le code en ce moment,

private void RelateFuirtWithCrates(List<string> selectedFruitIDs, int selectedCrateID) 
{ 

    string insertStatement = "INSERT INTO Fruit_Crate(FruitID, CrateID) Values " + 
     "(@FruitID, @CrateID);"; ?? I don't think if it's right query 

     using (SqlConnection connection = new SqlConnection(ConnectionString())) 
     using (SqlCommand cmd = new SqlCommand(insertStatement, connection)) 
     { 
      connection.Open(); 
      cmd.Parameters.Add(new SqlParameter("@FruitID", ????? Not sure what goes in here)); 
      cmd.Parameters.Add(new SqlParameter("@CrateID",selectedCrateID));   
} 
+0

double possible de [Comment puis-je mettre à jour les ID Crate de la liste des fruits en simple Requête SQL dans C#] (http://stackoverflow.com/questions/16539948/how-can-i-update-crate-ids-of-list-of-fruits-in-single-sql-query-in-c- sharp) –

Répondre

3

Vous pouvez faire une "upsert" avec la syntaxe MERGE dans SQL Server:

MERGE [SomeTable] AS target 
USING (SELECT @FruitID, @CrateID) AS source (FruitID, CrateID) 
ON (target.FruitID = source.FruitID) 
WHEN MATCHED THEN 
    UPDATE SET CrateID = source.CrateID 
WHEN NOT MATCHED THEN 
    INSERT (FruitID, CrateID) 
    VALUES (source.FruitID, source.CrateID); 

Sinon, vous pouvez utiliser quelque chose comme:

update [SomeTable] set CrateID = @CrateID where FruitID = @FruitID 
if @@rowcount = 0 
    insert [SomeTable] (FruitID, CrateID) values (@FruitID, @CrateID) 
+0

merci monsieur, mais puis-je ajouter la liste des fruitsIDs comme paramètre? – Mathematics

+0

@ user13814 La syntaxe 'MERGE' fonctionne bien avec les listes, mais: en termes de paramètres, ce n'est pas facile. Vous devez regarder soit "paramètres de valeur de table", ou en utilisant une sorte de "split" UDF. Ou ajoutez simplement beaucoup de paramètres. –

+0

Merci, mais je suis toujours confus avec comment puis-je ajouter FruitIDs comme paramètre sql monsieur, donc posé une autre question, http://stackoverflow.com/questions/16539948/how-can-i-update-crate-ids- of-list-of-fruits-in-single-sql-query-in-c-sharp – Mathematics

Questions connexes