在条件的情况下插入或更新
INSERT INTO or UPDATE in case of condition
我现在遇到了一个问题,我想要一个快速的解决方案。
我已经找到了关于这个问题的另一个答案,但 none 有帮助,我读过关于 INSERT INTO 和 INSERT ON DUPLICATE KEY UPDATE,但我认为它对我没有真正帮助。
所以问题是,我启用了一些迁移,将新列添加到现有的 tables,问题是 table 上的现有记录在迁移之前甚至获得了空值的记录在现有列上(因为我正在更改新 table 迁移的列的顺序)
我正在做一个 SP,它的目的是根据插入或更新填充新的 Table 迁移。
- 我想始终插入新记录,除非我在 table 上找到了一条包含空列(列 ID - 主键 - 已填充)的现有记录
"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
我现在遇到了一个问题,我想要一个快速的解决方案。
我已经找到了关于这个问题的另一个答案,但 none 有帮助,我读过关于 INSERT INTO 和 INSERT ON DUPLICATE KEY UPDATE,但我认为它对我没有真正帮助。
所以问题是,我启用了一些迁移,将新列添加到现有的 tables,问题是 table 上的现有记录在迁移之前甚至获得了空值的记录在现有列上(因为我正在更改新 table 迁移的列的顺序)
我正在做一个 SP,它的目的是根据插入或更新填充新的 Table 迁移。
- 我想始终插入新记录,除非我在 table 上找到了一条包含空列(列 ID - 主键 - 已填充)的现有记录
"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