更正此更新过程的 sql 语法
Correct sql syntax for this Update Procedure
我有三个table:
带有 LandingId、ProductId 和 UnitPrice 字段的 LandingDetails
带有 LandingId 和 LandingDate 字段的 LandingHeaders
具有 ProductId 和 CostPrice 字段的产品
我希望根据介于两个日期之间的 landingHeaders 中的着陆日期,从 Products 中的成本价格更新 LandingDetails UnitPrice。
第一次尝试时,我想到了以下内容,这可能符合目标的概念,但显然错过了 table 个连接。
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
任何人都可以指出我怀疑是我的愚蠢语法错误吗?
您在第二个 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
我有三个table:
带有 LandingId、ProductId 和 UnitPrice 字段的 LandingDetails
带有 LandingId 和 LandingDate 字段的 LandingHeaders
具有 ProductId 和 CostPrice 字段的产品
我希望根据介于两个日期之间的 landingHeaders 中的着陆日期,从 Products 中的成本价格更新 LandingDetails UnitPrice。
第一次尝试时,我想到了以下内容,这可能符合目标的概念,但显然错过了 table 个连接。
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
任何人都可以指出我怀疑是我的愚蠢语法错误吗?
您在第二个 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