2012-04-10 21 views
2

私はかなり単純なストアドプロシージャをSQL Serverに書き込もうとしています。私のエラーの原因が明らかな場合、私はそれをキャッチしていません。 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がありません。常にコードをインデントします。それはより良く見えるだけでなく、あなたはこれらの状況にぶつからないでしょう。また、IF/ELSEに単一のステートメントがある場合でも、BEING/ENDが必要でない他のブロックでもBEGINと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