4

SQL サーバーでかなり単純なストアド プロシージャを作成しようとしています。エラーの原因が明白な場合、私はそれを把握していません。SSMS から「')' 付近の構文が正しくありません」というメッセージが表示されます。どんな助けでも大歓迎です。手順は次のとおりです。

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')
4

1 に答える 1

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
于 2012-04-10T22:37:48.733 に答える