2016-03-31 18 views
2

yakınındaki bir yanlış sözdizimi MSSQL 2008 R2 veritabanı için saklı yordam yazmayı deniyorum. Saklanan prosedür bazı değerleri karşılaştırmalı ve bir bit/bool değeri döndürmelidir. Bir parametreye bağlı olarak (@PlatformCode), prosedür doğru kontrolü seçmelidir.Msg 102, Seviye 15, Durum 1, Satır 1 '<'

Ancak, sonuçımı çıktı değişkeninde tutmaya çalıştığım satırlarda bir hata alıyorum.

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 

Sonucu daha iyi bir yol var mı? Eğer eksik ne

cevap

2

böyle yapabilirsin daha iyisi CASE deyimi

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 

geçerli:

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

sayesinde daha iyi bir yol güzel. Bu yolla, 'IF' den sonra sadece satır var, bu yüzden 'BEGIN' ve 'END' çıkışını bırakabilirim. Tamam mı, yoksa 'güzelleştirici' koduyla mı? – BHuelse

+0

size kalmış ya da kaldırabilirsiniz. IF mantığının geçerli olduğu yeri açıkça gösterdiği gibi bırakmayı tercih ediyorum. –

+0

@BHuelse Bu cevabın doğru olduğunu düşünüyorsanız cevabı kabul edilebilir olarak işaretler misiniz? :) Şerefe –

İlgili konular