2012-04-10 5 views
2

Я пытаюсь написать довольно простую хранимую процедуру на сервере sql. Если источник моей ошибки очевиден, я не поймаю это. SSMS дает мне «Неправильный синтаксис рядом») ». Любая помощь будет оценена по достоинству. Вот процедура:SQL Server 2008 R2 Если/else синтаксис

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[sprocAddSymbols] @symbol NVARCHAR(10) 

AS 

BEGIN 

DECLARE @symbolCheck NVARCHAR(10) 
DECLARE @statusCheck NVARCHAR(10) 

SET @symbolCheck = (SELECT Symbol FROM tblSymbolsMain WHERE Symbol = @symbol) 
SET @statusCheck = (SELECT SymbolStatus FROM tblSymbolsMain WHERE Symbol = @symbol) 

IF (@symbolCheck IS NOT NULL AND @statusCheck = 'Inactive') 
BEGIN 
    UPDATE tblSymbolsMain 
    SET SymbolStatus = 'Active' 
    WHERE Symbol = @symbol 
END 
ELSE 
    INSERT INTO tblSymbolsMain (Symbol, DateAdded, Status) 
    VALUES (@symbol, GETDATE(), 'Active') 

ответ

5

Вам не хватает END в конце. Всегда отступайте от своего кода. Не только это выглядело бы лучше, вы бы не столкнулись с этими ситуациями. Кроме того, лучше использовать BEGIN и END, даже если у вас есть один оператор в IF/ELSE или, если на то пошло, в любом другом блоке, где BEING/END не требуется. Это уменьшает кошмар обслуживания, когда кто-то позже может добавить заявление и нарушить кодовое мышление, которое было частью блока IF или ELSE.

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[sprocAddSymbols] @symbol NVARCHAR(10) 

AS 

BEGIN 

    DECLARE @symbolCheck NVARCHAR(10) 
    DECLARE @statusCheck NVARCHAR(10) 

    SET @symbolCheck = (SELECT Symbol FROM tblSymbolsMain WHERE Symbol = @symbol) 
    SET @statusCheck = (SELECT SymbolStatus FROM tblSymbolsMain WHERE Symbol = @symbol) 

    IF (@symbolCheck IS NOT NULL AND @statusCheck = 'Inactive') 
    BEGIN 
     UPDATE tblSymbolsMain 
     SET SymbolStatus = 'Active' 
     WHERE Symbol = @symbol 
    END 
    ELSE 
    BEGIN 
     INSERT INTO tblSymbolsMain (Symbol, DateAdded, Status) 
     VALUES (@symbol, GETDATE(), 'Active') 
    END 

END 
+0

Я рад, что благодаря вам. – StatsViaCsh

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