【问题标题】:An expression of non-boolean type specified in a context where a condition is expected, near在预期条件的上下文中指定的非布尔类型的表达式,靠近
【发布时间】:2015-08-20 07:47:06
【问题描述】:
SET @SQLScript = 'SELECT b.name
FROM tblBrand b 
JOIN tblStore s ON b.PK_BrandID = s.FK_BrandID
JOIN tblCustomReportTemp  CT on b.PK_BrandID = CT.BrandID
WHERE b.Active =1 '

if(@reportname is not null)
        set @SQLScript = @SQLScript + ' AND CT.ReportName = @reportname'

    if(@username is not null)
        set @SQLScript = @SQLScript + ' AND CT.UserName = @username' 

以上行抛出:

在预期条件的上下文中指定的非布尔类型表达式,靠近“回购”。

【问题讨论】:

  • 您的代码在此处缺少某些内容。SELECT b.name, FROM tblBrand b 应删除此逗号或在此处添加新参数..
  • 能否请您发布 SqlScript 的 exec 调用?因为您没有将 reportName 和 userName 的值植入 sql,而是作为参数。

标签: sql c#-4.0 stored-procedures


【解决方案1】:

首先确保您将 @SQLScript 变量声明为 varchar(max)。

另外我不知道您是否使用 sp_executesql 来运行该查询,但如果您不使用,则必须使用 concat 函数或 concat 运算符来创建查询并为 varchar 格式的每个参数添加简单引号.

SET @SQLScript = 'SELECT b.name
FROM tblBrand b 
JOIN tblStore s ON b.PK_BrandID = s.FK_BrandID
JOIN tblCustomReportTemp  CT on b.PK_BrandID = CT.BrandID
WHERE b.Active =1 '

if(@reportname is not null)
        set @SQLScript = @SQLScript + ' AND CT.ReportName = ''' + @reportname + ''''

    if(@username is not null)
        set @SQLScript = @SQLScript + ' AND CT.UserName = ''' + @username + '''' 

应该可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2011-09-22
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多