2012-04-10 111 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