优化更新和插入查询

时间:2018-09-24 04:21:52

标签: sql-server sql-server-2008

我有此代码:

string query = @"UPDATE [dbo].[TrippingTariffTransaction]
                 SET [IsActive] = 0
                 WHERE Id in (SELECT Id 
                              FROM [dbo].[TrippingTariffTransaction] 
                              WHERE Trip = @Trip 
                                AND TrippingTariffId = @TrippingTariffId);";
query += @"INSERT INTO [dbo].[TrippingTariffTransactionAuditTrail]
                            (LogDatetime, MasterlistId, ComputerName, TrippingTariffTransactionID, Activity)                       
               SELECT 
                   GETDATE(), @MasterlistId, @ComputerName, Id, @Activity 
               FROM 
                   [dbo].[TrippingTariffTransaction] 
               WHERE 
                   Trip = @Trip AND TrippingTariffId = @TrippingTariffId";

如何优化此代码。我有多余的选择。在此先感谢:)

2 个答案:

答案 0 :(得分:1)

您可以使用OUTPUT子句

update  t
set     IsActive    = 0
OUTPUT  getdate(), @MasterlistId, @ComputerName, INSERTED.Id, @Activity
INTO    TrippingTariffTransactionAuditTrail 
        ( LogDatetime, MasterlistId, ComputerName, TrippingTariffTransactionID, Activity)
FROM    TrippingTariffTransaction t
WHERE   t.Trip             = @Trip 
AND     t.TrippingTariffId = @TrippingTariffId

答案 1 :(得分:0)

您可以使用temp表:

SELECT Id INTO #T
FROM [dbo].[TrippingTariffTransaction] 
WHERE Trip = @Trip 
AND TrippingTariffId = @TrippingTariffId

UPDATE [dbo].[TrippingTariffTransaction]
SET [IsActive] = 0
WHERE Id in (SELECT Id FROM #T)

INSERT INTO [dbo].[TrippingTariffTransactionAuditTrail]
(LogDatetime, MasterlistId, ComputerName, TrippingTariffTransactionID, Activity)                       

SELECT 
GETDATE(), @MasterlistId, @ComputerName, Id, @Activity 
FROM #T

DROP TABLE #T