2016-03-31 162 views
2

MSSQL 2008 R2データベース用のストアドプロシージャを作成しようとしています。 ストアドプロシージャは、いくつかの値を比較し、ビット/ブール値を返す必要があります。 パラメータ(@ PlatformCode)に応じて、プロシージャは適切なチェックを選択する必要があります。メッセージ102、レベル15、状態1、行1 '<'付近の構文が正しくありません

しかし、結果の出力をvarに保存しようとする行にエラーが発生します。

CREATE PROCEDURE CheckVersion 
    @PlatformCode nvarchar(4), 
    @ClientVersion int, 
    @ConfigId int = 1, 
    @Response bit OUTPUT 

AS 
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @version int 
    IF @PlatformCode = 'a' 
    BEGIN 
     SET @version = (SELECT aVersion FROM AppConfigTable WHERE ConfigID = @ConfigId) 
     SET @Response = (@version <= @ClientVersion) 
    END 
    IF @PlatformCode = 'i' 
    BEGIN 
     SET @version = (SELECT iVersion FROM AppConfigTable WHERE ConfigID = @ConfigId) 
     SET @Response = (@version <= @ClientVersion) 
    END 
END 
GO 

結果を返すには、もっと良い方法がありますか?あなたが不足している何

答えて

2

は、あなたがこのようにそれを行うことができ、より良いまだCASE文

CREATE PROCEDURE CheckVersion 
    @PlatformCode nvarchar(4), 
    @ClientVersion int, 
    @ConfigId int = 1, 
    @Response bit OUTPUT 

AS 
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @version int 
    IF @PlatformCode = 'a' 
    BEGIN 
     SET @version = (SELECT aVersion FROM AppConfigTable WHERE ConfigID = @ConfigId) 
     SET @Response = CASE WHEN (@version <= @ClientVersion) THEN 1 ELSE 0 END 
    END 
    IF @PlatformCode = 'i' 
    BEGIN 
     SET @version = (SELECT iVersion FROM AppConfigTable WHERE ConfigID = @ConfigId) 
     SET @Response = CASE WHEN (@version <= @ClientVersion) THEN 1 ELSE 0 END 
    END 
END 
GO 

です:

CREATE PROCEDURE CheckVersion 
    @PlatformCode nvarchar(4), 
    @ClientVersion int, 
    @ConfigId int = 1, 
    @Response bit OUTPUT 

AS 
BEGIN 
    SET NOCOUNT ON; 

    IF @PlatformCode = 'a' 
    BEGIN 
     SELECT @Response = CASE WHEN aVersion <= @ClientVersion THEN 1 ELSE 0 END FROM AppConfigTable WHERE ConfigID = @ConfigId   
    END 
    IF @PlatformCode = 'i' 
    BEGIN 
     SELECT @Response = CASE WHEN iVersion <= @ClientVersion THEN 1 ELSE 0 END FROM AppConfigTable WHERE ConfigID = @ConfigId   
    END 
END 
GO 
+0

おかげで、より良い方法がいいです。このようにして、 'IF'の直後に行があるので、 'BEGIN'と 'END'をオフにしておくことができます。それは大丈夫ですか、それとも両方とも「美しい」コードですか? – BHuelse

+0

までお任せください。あなたはそれを残すか、削除することができます。 IF論理がどこに適用されるかを明確に示すので、私はそれを残しておくことをお勧めします。 –

+0

@BHuelseこれが正しい答えだと思うなら、あなたは受け入れられると答えることができますか? :)歓声 –

関連する問題