使用存储过程更新两个不同的表

时间:2019-11-21 22:19:18

标签: sql stored-procedures sql-update dataset

我要实现的是仅使用一个存储过程来修改两个不同表中的某些列

SELECT 
    ccpa.idActividad,
    ccpa.sTitulo,
    ccpa.dFechaInicioEstimada,
    ccpa.dFechaInicioReal,
    ccpa.dFechaEstimada,
    ccpa.dFechaResolucion,
    ccpa.iProgreso
FROM 
    dbo.Ctrl_ClienteProyectosActividades ccpa;

SELECT 
    ccph.idHito,
    ccph.sHito,
    ccph.dFechaInicioEstimada,
    ccph.dFechaInicio,
    ccph.dFechaCierreEstimada,
    ccph.dFechaCierreReal,
    ccph.iProgreso
FROM 
    dbo.Ctrl_ClienteProyectosHitos ccph;

这些是我要改进的列。

到目前为止,我有这个

ALTER PROCEDURE [dbo].[spGantt_editar] 
    @sTitulo VARCHAR(50),
    @dFechaInicioEstimada DATETIME,
    @dFechaInicioReal DATETIME,
    @dFechaEstimada DATETIME,
    @dFechaResolucion DATETIME,
    @iProgreso INT
AS
BEGIN
    UPDATE Editar 
    SET dFechaEstimada = ISNULL(@dFechaEstimada, dFechaEstimada),
        @dFechaInicioReal = ISNULL(@dFechaInicioReal, dFechaInicioReal),
        ....
    WHERE 
        Editar = @dFechaI

    SET NOCOUNT ON;
END

关于如何实现此目标的任何想法?任何建议将不胜感激谢谢

1 个答案:

答案 0 :(得分:0)

您可以尝试使用单个存储过程(即您想要的方式)编写单独的更新命令。

所以代替这个:

ALTER PROCEDURE [dbo].[spGantt_editar] 
@sTitulo VARCHAR(50),
@dFechaInicioEstimada DATETIME,
@dFechaInicioReal DATETIME,
@dFechaEstimada DATETIME,
@dFechaResolucion DATETIME,
@iProgreso INT
AS 
BEGIN
UPDATE Editar 
SET dFechaEstimada = ISNULL(@dFechaEstimada, dFechaEstimada),
    @dFechaInicioReal = ISNULL(@dFechaInicioReal, dFechaInicioReal),
    ....
WHERE 
    Editar = @dFechaI

SET NOCOUNT ON;
END

您可以这样写:

ALTER PROCEDURE [dbo].[spGantt_editar] 
@sTitulo VARCHAR(50),
@dFechaInicioEstimada DATETIME,
@dFechaInicioReal DATETIME,
@dFechaEstimada DATETIME,
@dFechaResolucion DATETIME,
@iProgreso INT
AS
 BEGIN
UPDATE Editar 
SET dFechaEstimada = ISNULL(@dFechaEstimada, dFechaEstimada) where Editar =@dFechaI

UPDATE Editar 
SET @dFechaInicioReal = ISNULL(@dFechaInicioReal, dFechaInicioReal) WHERE Editar = @dFechaI

SET NOCOUNT ON;
END

希望这会有所帮助。