C# 如何更新SQL表逻辑
我有一张桌子的结构是C# 如何更新SQL表逻辑,c#,sql,sql-server,webforms,C#,Sql,Sql Server,Webforms,我有一张桌子的结构是 Table 3 Fruit ID - Foreign Key (Primary Key of Table 1) Crate ID - Foreign Key (Primary Key of Table 2) 现在我需要执行一个查询 更新水果ID的板条箱ID如果水果ID已在表中,如果未在表中,则在表3中插入记录作为新记录。 这就是我现在的代码 private void RelateFuirtWithCrates(List<string> selecte
Table 3
Fruit ID - Foreign Key (Primary Key of Table 1)
Crate ID - Foreign Key (Primary Key of Table 2)
现在我需要执行一个查询
更新水果ID的板条箱ID
如果水果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));
}
private void RelateFuirtWithCrates(列出selectedfruitid、int selectedCrateID)
{
string insertStatement=“插入水果箱(水果ID,板条箱ID)值”+
“(@FruitID,@CrateID);”;?我认为这是不对的
使用(SqlConnection连接=新的SqlConnection(ConnectionString()))
使用(SqlCommand cmd=newsqlcommand(insertStatement,connection))
{
connection.Open();
cmd.Parameters.Add(新的SqlParameter(“@FROUTID”,不确定这里是什么);
cmd.Parameters.Add(新的SqlParameter(“@CrateID”,selectedCrateID));
}
您可以使用SQL Server中的MERGE
语法执行“upsert”:
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)
@user13814
MERGE
语法适用于列表,但是:在参数方面并不容易。您需要查看“表值参数”或使用某种“拆分”udf。或者只是添加许多参数。谢谢,但我仍然不知道如何添加FruitIDs作为sql参数,先生,所以问了另一个问题,@user13814这实际上是一件非常困难的事情;我添加了一个使用“dapper”的示例对于您后面的一个问题,我们专门添加了一些帮助程序代码,以支持此常见但令人烦恼的场景可能的重复