【问题标题】:Correct sql syntax for this Update Procedure此更新过程的正确 sql 语法
【发布时间】:2016-01-13 17:16:18
【问题描述】:

我有三张桌子:

具有 LandingId、ProductId 和 UnitPrice 字段的 LandingDetails

具有 LandingId 和 LandingDate 字段的 LandingHeaders

具有 ProductId 和 CostPrice 字段的产品

我希望根据landingHeaders 中的landingdate 落在两个日期之间,从Products 中的costprice 中计算LandingDetails UnitPrice。

在第一次尝试时,我想出了以下内容,这可能符合目标的概念,但显然错过了表连接。

    CREATE PROCEDURE dbo.UpdateAndPriceLandings
@StartDate DATE,
@EndDate  DATE
  AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

UPDATE LandingDetails
  SET UnitPrice = (SELECT p.CostPrice FROM Products p WHERE p.ProductId = LandingDetails.ProductId AND 
  dbo.LandingHeaders.LandingId = LandingId AND dbo.LandingHeaders.LandingDate1 BETWEEN @StartDate AND @EndDate)
GO

版本二如下,但我怀疑连接不正确。

CREATE PROCEDURE dbo.UpdateAndPriceLandings
@StartDate DATE,
@EndDate  DATE
  AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

UPDATE dbo.LandingDetails
  SET UnitPrice = (SELECT p.CostPrice FROM     dbo.LandingDetails ld INNER JOIN
                         dbo.LandingHeaders lh ON ld.LandingId = lh.LandingId INNER JOIN
                         dbo.Products P ON ld.ProductId = p.ProductId
 WHERE 

  ld.LandingId = lh.LandingId AND lh.LandingDate BETWEEN @StartDate AND @EndDate)

GO

谁能指出我怀疑是我的一个愚蠢的语法错误?

【问题讨论】:

  • 我建议你使用 MERGE 语句,它更容易阅读并且性能更好
  • @sagi 其实 MERGE 并没有那么出色的表现。
  • 通常最好在更新@EvaldasBuinauskas 中进行子选择

标签: sql sql-server-2014-express


【解决方案1】:

您在第二个 SP 中的查询应如下所示:

UPDATE
    dbo.LandingDetails
SET 
    UnitPrice=p.CostPrice
FROM
    dbo.LandingDetails ld
    INNER JOIN dbo.LandingHeaders lh ON 
        lh.LandingId=ld.LandingId
    INNER JOIN dbo.Products P ON 
        P.ProductId=ld.ProductId
 WHERE 
    lh.LandingDate BETWEEN @StartDate AND @EndDate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多