繁体   English   中英

此更新过程的正确sql语法

[英]Correct sql syntax for this Update Procedure

我有三个表:

具有LandingId,ProductId和UnitPrice字段的LandingDetails

具有LandingId和LandingDate字段的LandingHeader

具有字段ProductId和CostPrice的产品

我想根据落在两个日期之间的landingHeader的着陆日期,从产品的成本价格中对LandingDetails单价进行审核。

在第一次尝试时,我想出了以下内容,这可能与目标概念相同,但显然错过了表联接。

    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

版本2如下,但我怀疑联接不正确。

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

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

您在第二个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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM