0

由于我没有ModuleID,我想首先使用ModuleName从 Modules 表中获取。

ALTER PROCEDURE dbo.spEditTask
@ID                     int,
@ModuleName             varchar(50), 
@Task                   varchar(50), 
@ListOfDevelopers       varchar(50),
@StartDate              date, 
@PlannedEndDate         date, 
@EstimatedEndDate       date, 
@Status                 varchar(50),
@Comments               varchar(500),
@LastAction             varchar(50),
@Started                 bit
AS
BEGIN 

  DECLARE @ModuleID int; 
  SET @ModuleID = 
  (SELECT ModuleID 
  FROM Modules
  WHERE ModuleName = @ModuleName); 
  GO

  UPDATE DTasks
SET ModuleID = @ModuleID, 
    Task = @Task, 
    ListOfDevelopers = @ListOfDevelopers, 
    StartDate = @StartDate, 
    PlannedEndDate = @PlannedEndDate, 
    EstimatedEndDate = @EstimatedEndDate, 
    Status = @Status, 
    Comments = @Comments, 
    LastAction = @LastAction,
    Started  = @Started,
    LastUpdated = GETDATE() 
WHERE ID  = @ID
GO
END

感谢您的帮助

4

2 回答 2

3

你需要把你的行换成beginend

ALTER PROCEDURE dbo.spEditTask 
@ID                     int, 
@ModuleName             int, 
@Task           varchar(50) 
as 
begin     
    DECLARE @ModuleID int;  

    SELECT @ModuleID = ModuleID  
    FROM Modules 
    WHERE ModuleName = @ModuleName  

    UPDATE DTasks 
    SET   ModuleID = @ModuleID,  
      Task = @Task,  
    WHERE ID   = @ID 
end

虽然你可以只用一行

UPDATE DTasks
SET
   ModuleID = Modules.ModuleID,
   Task = @task
FROM DTasks cross join Modules
WHERE DTasks.ID = @ID
AND Modules.ModuleName = @ModuleName
于 2012-10-17T20:48:28.900 回答
1

您只是缺少as关键字和 select 表达式周围的括号:

ALTER PROCEDURE dbo.spEditTask
@ID                     int,
@ModuleName             int,
@Task           varchar(50)
AS

DECLARE @ModuleID int; 

SET @ModuleID =
(SELECT ModuleID 
FROM Modules
WHERE ModuleName = @ModuleName)

UPDATE DTasks
SET   ModuleID = @ModuleID, 
      Task = @Task, 
WHERE ID   = @ID
于 2012-10-17T20:56:14.377 回答