由于我没有 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
感谢您的帮助
答案 0 :(得分:3)
您需要将行包装在begin
和end
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
答案 1 :(得分:1)
您只是缺少as
关键字,并且在选择表达式周围有括号:
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