2012-10-17 1 views
0

Поскольку я не имею ModuleID, я хотел бы получить из таблицы модулей первой, используя MODULENAME.Как написать более, что одно утверждение в том же SPROC

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 

Спасибо за помощь

+1

«GO» не является инструкцией T-SQL. Это клиентский разделитель пакетов. Он не принадлежит хранимым процедурам. – GilM

+0

Я удалил его, теперь он сработал. Я также должен исправить некоторые другие проблемы. Но тот я исправил последнее. Теперь он работает. – Richard77

ответ

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 
+0

На самом деле это неверно. «Начало» и «конец» не нужны. – Guffa

+0

Я использовал вам вторую технику, которую вы предложили. – Richard77

1

Вы просто не хватает ключевое слово as и круглые скобки aro и выражение выбора:

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 
+0

Я просто добавляю ключевое слово AS, но у меня такая же проблема. Ошибка: операция не может быть выполнена. трудно сказать, в чем проблема. Я также исправляю @ModuleName, которое является varchar, а не int. Да, я также добавил paranthesis. – Richard77

+1

@ Richard77: Круглые скобки вокруг выражения select. – Guffa

+0

Теперь у вас есть весь Sproc. – Richard77

Смежные вопросы