【问题标题】:TSQL Update with Subquery带有子查询的 TSQL 更新
【发布时间】:2013-06-12 17:51:18
【问题描述】:

我创建了以下更新,但性能很差。我觉得可能有一种更简单或更有效的方式来进行查询,而不是我的蛮力尝试。请帮忙。

Update LocalServers 
set MustIPL = 1 
where LocalServerID IN (SELECT distinct olu.LocationID 
                        from OfferLocUpdate olu with (NoLock) 
                        Join LocalServers ls WITH (NOLOCK) on olu.LocationID = ls.LocationID 
                        Join CPE_IncentiveDLBuffer DLB with (NoLock) on olu.OfferID = dlb.OfferID 
                        where 
                             olu.LastSent > IncentiveLastHeard 
                             and CreationDate < dateadd(d, -@Days, getdate()) 
                             and DLB.FileName LIKE '%IDL-A')

【问题讨论】:

    标签: tsql sql-server-2008-r2 updating


    【解决方案1】:

    试试这个:

        DECLARE @DateNow DATETIME
        SET @DateNow = GETDATE()
    
        ;WITH cte_DLB (OfferID, [FileName]) AS
        (
            SELECT OfferID, [FileName]
            FROM CPE_IncentiveDLBuffer (NOLOCK)
            WHERE  DLB.[FileName] LIKE '%IDL-A'
        )
        UPDATE 
            LS
        SET 
            LS.MustIPL = 1
        FROM 
            LocalServers LS 
            JOIN OfferLocUpdate OLU (NOLOCK) ON LS.LocalServerID = OLU.LocationID
            JOIN LocalServers ls (NOLOCK) ON OLU.LocationID = LS.LocationID 
            JOIN cte_DLB ON OLU.OfferID = cte_DLB.OfferID
        WHERE 
            OLU.LastSent > IncentiveLastHeard 
            AND CreationDate < dateadd(d, -@Days, @DateNow)
    

    如果您澄清“IncentiveLastHeard”和“CreationDate”列属于哪个表,这将非常有帮助

    【讨论】:

      猜你喜欢
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多