2012-04-10 251 views
2

我试着写SQL Server中的相当简单的存储过程。如果我的错误的来源是显而易见的,我并没有抓住它。 SSMS正在给我“附近的语法不正确”)'。“任何帮助,将不胜感激。以下是过程:SQL Server 2008 R2中的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 
    INSERT INTO tblSymbolsMain (Symbol, DateAdded, Status) 
    VALUES (@symbol, GETDATE(), 'Active') 

回答

5

你缺少最终结束。始终缩进您的代码。不仅看起来会更好,你不会遇到这些情况。此外,最好使用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 2012-04-10 22:39:07