代码之家  ›  专栏  ›  技术社区  ›  MB_18

如何在SQL中检查字符串中的一组条件是否为真

  •  0
  • MB_18  · 技术社区  · 4 年前

    我有一个表达:

    DECLARE @Conditions NVARCHAR(MAX) = '200>100 AND YEAR(GETDATE())=2022'
    

    我想检查一下这个表达式是否正确。

    1 回复  |  直到 4 年前
        1
  •  3
  •   MatBailie    4 年前

    要在T-SQL中以SQL语句的形式执行字符串,请使用 sp_executesql

    在您的例子中,您希望使用输出参数,并将代码片段嵌入到更大的语句中,例如 SELECT @outputParam = CASE WHEN <your code snippet> THEN 1 ELSE 0 END (因为T-SQL没有布尔数据类型。)

    DECLARE @Conditions NVARCHAR(MAX) = '200>100 AND YEAR(GETDATE())=2022';
    
    DECLARE @SQLString NVARCHAR(MAX);
    
    DECLARE @SQLResult INT;
    
    SET @SQLString = CONCAT(
        N'SELECT @Result = CASE WHEN ',
        @Conditions,
        N' THEN 1 ELSE 0 END;'
    )
    
    EXECUTE sp_executesql  
        @SQLString  
       ,N'@Result INT OUTPUT'
       ,@Result = @SQLResult OUTPUT;  
    
    -- This SELECT statement returns the value of the OUTPUT parameter.  
    SELECT @SQLResult;
    

    https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=5697ea4d14201e44d0e8888abbc6037b


    编辑:

    避免 CASE 通过将结果初始化为 0 (失败)并仅将其设置为 1 (成功)如果条件是真的。

    DECLARE @Conditions NVARCHAR(MAX) = '200>100 AND YEAR(GETDATE())=2022';
    
    DECLARE @SQLString NVARCHAR(MAX);
    
    DECLARE @SQLResult INT = 0;
    
    SET @SQLString = CONCAT(
        N'SELECT @Result = 1 WHERE ',
        @Conditions
    )
    
    EXECUTE sp_executesql  
        @SQLString  
       ,N'@Result INT OUTPUT'
       ,@Result = @SQLResult OUTPUT;  
    
    -- This SELECT statement returns the value of the OUTPUT parameter.  
    SELECT @SQLResult;
    

    https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=3e375c464f1eab2e652bc446a4c7484f