2013-05-14 2 views
2

У меня есть таблица структурирована,Как я могу обновить SQL таблицы логики

Table 3 

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

Теперь нужно выполнить запрос, который будет,

UpdateCrate IDизFruit IDеслиFruit IDуже находится в таблице, а если нет, тогда вставьте запись в таблицу 3 в качестве новой записи.

Это то, что я получил в коде прямо сейчас,

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

Возможный дубликат [Как обновить идентификаторы ящиков списка фруктов в одном SQL-запрос в C#] (http://stackoverflow.com/questions/16539948/how-can-i-update-crate-ids-of-list-of-fruits-in-single-sql-query-in-c- sharp) –

ответ

3

Вы можете сделать "upsert" с MERGE синтаксиса в 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); 

В противном случае, вы можете использовать что-то например:

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

спасибо, сэр, но могу ли я добавить список fruitIDs в качестве параметра? – Mathematics

+0

@ user13814 синтаксис 'MERGE' хорошо работает со списками, но: с точки зрения параметров это непросто. Вам нужно посмотреть либо «параметры таблицы значений», либо использовать «split» udf. Или просто добавьте множество параметров. –

+0

Спасибо, но я все еще смущен тем, как добавить FruitID в качестве параметра sql sir, поэтому задал другой вопрос: http://stackoverflow.com/questions/16539948/how-can-i-update-crate-ids- из-списка-of-fruits-in-single-sql-query-in-c-sharp – Mathematics

Смежные вопросы