Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并和删除SQL查询_Sql - Fatal编程技术网

合并和删除SQL查询

合并和删除SQL查询,sql,Sql,您好,我不确定如何修改此查询以删除源中不再存在的目标记录。另一个棘手的部分是,如果记录的T.TransactionDate少于90天,它只能从目标中删除记录。我知道如果不匹配源代码,这是一个错误,但我不确定如何构建查询的其余部分。有人能帮我做这个零件吗 MERGE TransactionData AS T USING (SELECT * FROM Temp_TransactionData) AS S ON (T.Transaction_ID = S.Transaction_ID AND T.Tr

您好,我不确定如何修改此查询以删除源中不再存在的目标记录。另一个棘手的部分是,如果记录的T.TransactionDate少于90天,它只能从目标中删除记录。我知道如果不匹配源代码,这是一个错误,但我不确定如何构建查询的其余部分。有人能帮我做这个零件吗

MERGE TransactionData AS T
USING (SELECT * FROM Temp_TransactionData) AS S
ON (T.Transaction_ID = S.Transaction_ID AND T.Trans_Line_ID = S.Trans_Line_ID) 
WHEN NOT MATCHED BY TARGET
    THEN INSERT(Account_ID, Class_ID, Company_ID, Company_Name, Design_ID, Item_ID, ItemCount, Invoice_ID, Rate, Amount, Transaction_ID, Trans_Line_ID, Transaction_Date, Transaction_Type, LicensorCode_ID, Property) VALUES(S.Account_ID, S.Class_ID, S.Company_ID, S.Company_Name, S.Design_ID, S.Item_ID, S.ItemCount, S.Invoice_ID, S.Rate, S.Amount, S.Transaction_ID, S.Trans_Line_ID, S.Transaction_Date, S.Transaction_Type, S.LicensorCode_ID, S.Property)
WHEN MATCHED 
    THEN UPDATE SET T.Account_ID = S.Account_ID, T.Class_ID = S.Class_ID, T.Company_ID = S.Company_ID, T.Company_Name = S.Company_Name, T.Design_ID=S.Design_ID, T.Item_ID=S.Item_ID, T.ItemCount=S.ItemCount, T.Invoice_ID=S.Invoice_ID, T.Rate=S.Rate, T.Amount=S.Amount,  T.Transaction_ID=S.Transaction_ID, T.Trans_Line_ID=S.Trans_Line_ID, T.Transaction_Date=S.Transaction_Date, T.Transaction_Type=S.Transaction_Type, T.LicensorCode_ID=S.LicensorCode_ID, T.Property=S.Property;

对于具有T.TransactionDate 90天或更早的合并删除事务,请使用以下命令

WHEN NOT MATCHED BY SOURCE and T.TransactionDate < DATEADD(d, -90, current_timestamp)
   THEN DELETE

您使用的是哪种数据库管理系统?神谕SQL Server?我通过切换<到>,使其工作。幸好我在运行之前做了备份!
    MERGE TransactionData AS T
    USING (SELECT * FROM Temp_TransactionData) AS S
    ON (T.Transaction_ID = S.Transaction_ID AND T.Trans_Line_ID = S.Trans_Line_ID) 
    WHEN NOT MATCHED BY TARGET
        THEN INSERT(Account_ID, Class_ID, Company_ID, Company_Name, Design_ID, Item_ID, ItemCount, Invoice_ID, Rate, Amount, Transaction_ID, Trans_Line_ID, Transaction_Date, Transaction_Type, LicensorCode_ID, Property) VALUES(S.Account_ID, S.Class_ID, S.Company_ID, S.Company_Name, S.Design_ID, S.Item_ID, S.ItemCount, S.Invoice_ID, S.Rate, S.Amount, S.Transaction_ID, S.Trans_Line_ID, S.Transaction_Date, S.Transaction_Type, S.LicensorCode_ID, S.Property)
    WHEN MATCHED 
        THEN UPDATE SET T.Account_ID = S.Account_ID, T.Class_ID = S.Class_ID, T.Company_ID = S.Company_ID, T.Company_Name = S.Company_Name, T.Design_ID=S.Design_ID, T.Item_ID=S.Item_ID, T.ItemCount=S.ItemCount, T.Invoice_ID=S.Invoice_ID, T.Rate=S.Rate, T.Amount=S.Amount,  T.Transaction_ID=S.Transaction_ID, T.Trans_Line_ID=S.Trans_Line_ID, T.Transaction_Date=S.Transaction_Date, T.Transaction_Type=S.Transaction_Type, T.LicensorCode_ID=S.LicensorCode_ID, T.Property=S.Property;
WHEN NOT MATCHED BY SOURCE AND T.TransactionDate <90
    THEN DELETE