【发布时间】:2014-04-07 05:36:20
【问题描述】:
我想从 C# 传递存储过程 where 子句的参数。我已经声明了一个参数@WhereClause nvarchar(max) 并且在查询中我给出了这样的
select distinct
CLFIIK.AdID
,CLFIIK.AdGiverName
,CLFIIK.AdGiverEmail
,CLFIIK.Title
,left(CLFIIK.Descripton,200) +'...' as Descripton -- select 200 Caharacter and after 200 char it will add ...
, case
when CLFIIK.type = 1 then -- Wanted Events
'Wanted Event'
when CLFIIK.type = 1 then -- offering Events
'Offering Event'
else -- Neither Wanted no Offering Events
'No Event Yet'
end as Type
,CASE
WHEN DATEDIFF(HOUR, PublishedDate, GETDATE()) < 24 THEN
CASE DATEDIFF(HOUR, PublishedDate, GETDATE())
WHEN 1 THEN
CONVERT(VARCHAR, DATEDIFF(HOUR, PublishedDate, GETDATE())) + ' hour ago'
ELSE
CONVERT(VARCHAR, DATEDIFF(HOUR, PublishedDate, GETDATE())) + ' hours ago'
END
ELSE
REPLACE(CONVERT(VARCHAR, PublishedDate, 6), ' ', '-')
END as PublishedDate
,CLFIIK.LastModifiedDate
,LM.LocalityName +', '+ CityM.CityName as Address
,CM.CategoryName
,CM.CategoryID
from
CLF.utblCLFAdInstanceInfoKeys as CLFIIK
inner join
dbo.utblCategoryMaster as CM on CM.CategoryID = CLFIIK.CategoryID
inner join
dbo.utblLocalityMaster as LM on LM.LocalityID = CLFIIK.LocalityID
inner join
dbo.utblCityMaster as CityM on CityM.CityID = LM.CityID
left join
CLF.utblCLFAdInstanceDtls as AdInsDeets on AdInsDeets.AdID = CLFIIK.AdID
where
@WhereClause;
SQL Server 2008 R2 抛出此错误
消息 4145,级别 15,状态 1,过程 udspGetCLFSearchResultEventList,第 55 行
在预期条件的上下文中指定的非布尔类型的表达式,靠近 ';'。
我该如何解决这个错误?
【问题讨论】:
-
这是 where 子句的语法:technet.microsoft.com/en-us/library/… 为了在语法上正确,您的变量应该是布尔值,但这不会达到您想要的效果。正确的方法是对搜索谓词的特定部分进行参数化,或者将存储过程转换为视图,然后在前端使用实体框架之类的东西为您创建正确的 sql。
-
最好描述一下为什么要将where子句作为文本传递,可能会有更好的解决方案。如果不是,那么您可以从变量构造一个字符串查询,然后使用 EXECUTE technet.microsoft.com/en-us/library/… 执行它,但我建议不要这样做
-
我不能将 nvarchar 转换为布尔值,以便获得预期的输出
-
实际上我想在我的网站上进行分面搜索。这就是我想在 C# 中设置参数并通过的唯一原因
标签: sql-server sql-server-2008-r2 where-clause