sql-server-2008 - 消息102,级别15,状态1,行1'<'附近的语法不正确

标签 sql-server-2008 tsql

我正在尝试为MSSQL 2008 R2数据库编写存储过程。
存储过程应比较一些值并返回一个位/布尔值。
根据参数(@PlatformCode),该过程应选择正确的检查。

但是我在尝试将结果存储到输出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


是否有更好的方法返回结果?

最佳答案

您缺少的是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

关于sql-server-2008 - 消息102,级别15,状态1,行1'<'附近的语法不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36342530/

相关文章:

java - 无法执行该操作,因为链接服务器 "SQLNCLI10"的 OLE DB 提供程序 "(null)"无法开始分布式事务

c# - 错误 : 26 - Error Locating Server/Instance Specified.(无法从我的主机服务器连接到我的本地数据库)

php - SQL触发器删除异常值

sql - 如何通过恢复从sql 2000迁移到sql 2008?

sql-server - sql server 可选参数 : syntax for between clause

mysql - 带计数的 SQL 复杂查询

sql-server - 在 SQL 2008/12 中压缩 VARCHAR - 看不到结果

sql-server - 了解 SQL Server 中的锁定行为

sql-server - 对几个字符串的全文搜索结果进行排序

SQL 服务器 : Update table based on JSON