C# 在条件允许时插入或更新

C# 在条件允许时插入或更新,c#,sql,sql-server,cursor,insert-into,C#,Sql,Sql Server,Cursor,Insert Into,我目前正面临一个问题,我想快速解决这个问题 我已经找到了关于这个问题的另一个答案,但没有一个有帮助,我读过关于插入到和插入到重复密钥更新,但我认为它并没有真正帮助我 所以问题是,我启用了一些迁移,将新列添加到现有表中,问题是迁移之前表上的现有记录即使在现有列上也会得到空值的记录(因为我正在更改迁移的新表上的列的顺序) 我正在做一个SP,其目的是根据插入或更新填充迁移的新表 我希望总是插入新记录,除非我在表中发现一条现有记录的列为空(列Id-主键-已填充) “伪代码”(混合sql表知识和c#语

我目前正面临一个问题,我想快速解决这个问题

我已经找到了关于这个问题的另一个答案,但没有一个有帮助,我读过关于插入到和插入到重复密钥更新,但我认为它并没有真正帮助我

所以问题是,我启用了一些迁移,将新列添加到现有表中,问题是迁移之前表上的现有记录即使在现有列上也会得到空值的记录(因为我正在更改迁移的新表上的列的顺序)

我正在做一个SP,其目的是根据插入或更新填充迁移的新表

  • 我希望总是插入新记录,除非我在表中发现一条现有记录的列为空(列Id-主键-已填充)
“伪代码”(混合sql表知识和c#语法)是这样的:

int i = 0;
foreach(Record item in importing_data_table)
{

     if(i < tableMigrated.Length && tableMigrated[i].Column IS NULL)
     {
          UPDATE tableMigrated[i] SET Column = item.Column
     }
     else
     {
          INSERT INTO item 
     }

     i++;
}
inti=0;
foreach(导入数据表中的记录项)
{
如果(i
注意:插入前从迁移的表中删除所有行是不可能的,因为该表有外键。尝试该方法时,我遇到以下错误: -DELETE语句与引用约束“FK_blabla.Testing_testingTest.tableMigrated_Id”冲突

注2:也许我唯一的选择就是使用游标


非常感谢您事先的帮助

在存储过程中,使用Merge语句。“合并”提供了根据插入条件插入的功能,否则将更新。这里有一个例子

MERGE dbo.FactBuyingHabits AS Target
USING (SELECT CustomerID, ProductID, PurchaseDate FROM dbo.Purchases) AS Source
ON (Target.ProductID = Source.ProductID AND Target.CustomerID = Source.CustomerID)
WHEN MATCHED THEN
    UPDATE SET Target.LastPurchaseDate = Source.PurchaseDate
WHEN NOT MATCHED BY TARGET THEN
    INSERT (CustomerID, ProductID, LastPurchaseDate)
    VALUES (Source.CustomerID, Source.ProductID, Source.PurchaseDate)

看看

我知道有人会问这个问题。这周我自己解决了。更新返回一个整数,指示受影响的行数。所以如果Update返回零,那么我插入数据。如果数据库中已存在主键值,则无法插入。所以,首先尝试更新,如果它返回零行,那么使用Insert。谢谢你的回答,我遇到了一个错误,找不到问题,有时SQL会让我发疯该死的。。。大多数时候显示的错误根本没有帮助!这是我当前的代码,最终它成功了,似乎我真的需要使用“Target”作为Merge语句(第一行)的最后一个词,我很难确定它可以是目标数据库的任何别名,现在看来=/实际上我可以将“Target”这个词与表的任何别名一起使用,我的问题是替换所有这些也发生了变化“当与目标不匹配时”改为“当与MYTABLEALIAS不匹配时”,将MYTABLEALIAS更改为目标它开始完美工作,非常感谢您的回答!:)太好了,很好的一个TiagoM