在条件的情况下插入或更新

INSERT INTO or UPDATE in case of condition

我现在遇到了一个问题,我想要一个快速的解决方案。

我已经找到了关于这个问题的另一个答案,但 none 有帮助,我读过关于 INSERT INTO 和 INSERT ON DUPLICATE KEY UPDATE,但我认为它对我没有真正帮助。

所以问题是,我启用了一些迁移,将新列添加到现有的 tables,问题是 table 上的现有记录在迁移之前甚至获得了空值的记录在现有列上(因为我正在更改新 table 迁移的列的顺序)

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

"pseudo code" (混合了 sql table 的知识和 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++;
}

注意:在插入之前从 tableMigrated 中删除所有行 不可能,因为有外键那个 table。尝试该方法时出现以下错误: - DELETE 语句与 REFERENCE 约束冲突 "FK_blabla.Testing_testingTest.tableMigrated_Id".

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

非常感谢您的提前帮助!

在您的存储过程中,使用合并语句。 Merge 根据您的插入条件提供 INSERT 功能,否则提供 UPDATE 功能。这是一个例子

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)

看看Technet - Inserting, Updating, and Deleting Data by Using MERGE