2016-03-31 125 views
2

我想爲MSSQL 2008 R2數據庫編寫一個存儲過程。 存儲過程應比較一些值並返回一個位/布爾值。 根據參數(@PlatformCode),程序應選擇正確的檢查。Msg 102,Level 15,State 1,Line 1錯誤的語法靠近'''

但我得到一個錯誤,在我嘗試將結果存儲在輸出變量中的行中。

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如果您認爲這是正確的答案,您可否請您將答案標記爲已接受? :)歡呼聲 –

相關問題