SQL Error: An expression of non-boolean type specified in a context where a condition is expected, near 'AND'

SQL Error: An expression of non-boolean type specified in a context where a condition is expected, near 'AND'

我有下面的 sql 可以在 sql studio

Declare @where nvarchar(MAX) = 'ORG_TYPE_CODE LIKE ''%INC%''' 

Declare @sql nvarchar(MAX) = 'SELECT * FROM C_B_ORG_DTL WHERE '+@where+' AND HUB_STATE_IND=1' 

Exec sp_executeSQL @sql

我正在尝试在 JPA 中实现它

@Query(value = "Declare @where nvarchar(MAX) = ?1 " +
        "Declare @sql nvarchar(MAX) = 'SELECT * FROM C_B_ORG_DTL WHERE '+@where+' AND HUB_STATE_IND=1' " +
        "Exec sp_executeSQL @sql", nativeQuery = true)
List<CBPty> getAllCompanies(String orgType);

我遇到了错误

An expression of non-boolean type specified in a context where a condition is expected, near 'AND'

如何让它发挥作用?提前致谢

你的错误在这里:

@Query(value = "Declare @where nvarchar(MAX) =** ?1** " +
        "Declare @sql nvarchar(MAX) = 'SELECT * FROM C_B_ORG_DTL WHERE '+@where+' AND HUB_STATE_IND=1' " +
        "Exec sp_executeSQL @sql", nativeQuery = true)
List<CBPty> getAllCompanies(String orgType);

如果替换后写查询变成:

SELECT * FROM C_B_ORG_DTL WHERE 1 AND HUB_STATE_IND=1

如果您在组合 @where 变量的 Where 部分中查看,您必须在其中使用布尔表达式,例如

 SELECT * FROM C_B_ORG_DTL WHERE ORG_TYPE_CODE LIKE '%INC%' AND HUB_STATE_IND=1;

成功了。我在传入的@where 参数中遇到语法问题。

@Query(value = " DECLARE @where nvarchar(MAX)" +
            " SET @where = (?1) " +
            " EXEC('SELECT * FROM C_B_ORG_DTL WHERE '+@where+' AND HUB_STATE_IND=1' )", nativeQuery = true)
List<CBPty> getAllCompanies(String orgType);

如果我们在 sql 中 运行 个动态生成的片段,我们需要使用 EXEC。希望这对遇到类似问题的人有用。