存储过程中具有多个联接的UPDATE表

时间:2018-12-03 15:47:55

标签: sql-server stored-procedures sql-update

我有一个存储过程,可以返回所需的查询结果。效果很好。

USE [Productivity]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[ProjectsBySite]
(
@idsite int
)
AS  
    SELECT l.FirstName, l.LastName,s.SiteName, p.ProjectName, p.StartDate, 
           p.EndDate, pz.SavingsDate, pz.PlannedSavings,pz.ActualSavings
    FROM ((((pt_Site as s
    inner join pt_ProjectsSites as ps on s.IDSite = ps.Site_id)
    inner join pt_Projects as p on ps.Project_id = p.IDProjects)
    inner join pt_ProjectSavings as pz on p.IDProjects = pz.Project_id)
    inner join pt_Personnel as l on p.Personnel_id = l.IDPersonnel)
    WHERE IDSite = @idsite
RETURN

我想做的是使用相同的查询来更新pt_ProjectSavings表中的ActualSavings字段。

这是我尝试的内容,但是当我执行该过程时,该程序什么也不返回。有人可以告诉我我在做什么错吗?

USE [Productivity]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[UpdateSavings]
(
@idsite int
)
AS
BEGIN
    SET NOCOUNT ON;
    UPDATE pz
    SET Project_id = 1  
        FROM ((((pt_Site as s
        inner join pt_ProjectsSites as ps on s.IDSite = ps.Site_id)
        inner join pt_Projects as p on ps.Project_id = p.IDProjects)
        inner join pt_ProjectSavings as pz on p.IDProjects = pz.Project_id)
        inner join pt_Personnel as l on p.Personnel_id = l.IDPersonnel)
        WHERE IDSite = @idsite
END

我确定这不只是一件事,而且我知道我需要添加SELECT:

SELECT l.FirstName, l.LastName,s.SiteName, p.ProjectName, p.StartDate, 
       p.EndDate, pz.SavingsDate, pz.PlannedSavings,pz.ActualSavings

我只是想不通语法。

2 个答案:

答案 0 :(得分:0)

您必须最终选择所需的结果
当您更新查询中的记录时,它无法返回任何内容。


async f(n) {
    this.g(n);
    await new Promise((resolve) => {
        setImmediate(() => {
            resolve();
        });
    });
}

但是,如果您只是想确认数据是否已更新,请使用@@ ROWCOUNT
只需在最后使用select @@ ROWCOUNT ,您就不会在数据库中影响任何行。

答案 1 :(得分:0)

如果我了解您的意思,并且想要在选择某些记录后更新表,并且您正在使用SSMS(这是很多假设),那么请尝试以下操作: 右键单击表格,然后选择“编辑前200行”。这将为您显示表格。然后,在左上角单击看起来像附件图像的SQL按钮。这将打开显示选择的查询窗口。如果将原始select替换为select查询(而不是更新,而只是select语句),则将获得结果并能够编辑其下面的行。我希望这是有道理的。根据您的要求,似乎您想编辑表本身。如果希望系统更新语句起作用,则需要通过网页或表单通过文件或其他输入来捕获值并将其传递给SQL进行更新。那看起来不像你在这里做什么。注意,这是对真实表的实时更新。您所做的任何更改都是永久的。

SQL Button to Edit Table