日期:2014-05-18  浏览次数:20874 次

在应使用条件的上下文(在 '00001' 附近)中指定了非布尔类型的表达式。
-- 存储过程的主要目的是得到库存里没有的商品信息
create Proc [dbo].[warenotinmanager]  
@WareClause Varchar(2000), --商品信息条件
@Depart Varchar(1000), --部门信息条件
@begindate char(8), --开始时间
@Enddate char(8) --结束时间
As  
   
create Table #Ware(warecode char(10),trademarkcode char(10),specification char(20),warename varchar(50)) --建立临时表,存储商品信息的编码,品牌编码,款号,商品的名称
create table #dept(deptcode char(10)) --建立临时表,存储部门的编码
   
IF Isnull( @wareclause ,'') <> ''  
Set @wareclause = ' Where ' + @wareClause  
Exec( 'Insert #Ware(warecode,trademarkcode,specification,warename )
 Select warecode ,trademarkcode,specification,warename From sawarecode ' + @wareclause )  

IF Isnull( @Depart ,'') <> ''  
Set @Depart = ' Where ' + @Depart  
exec('insert #dept(deptcode) select DepartmentCode from stdepartment'+@depart)

select saTrademark.TrademarkName,specification,warename from #Ware ,saTrademark
where #ware.trademarkcode=saTrademark.TrademarkCode and warecode not in
(select warecode from whStockManage where WareHouseID in (select deptcode from #dept) )
--saTrademark为品牌表 whStockManage 为库存表
  

exec warenotinmanager '00001','J001','',''
消息 4145,级别 15,状态 1,第 2 行
在应使用条件的上下文(在 '00001' 附近)中指定了非布尔类型的表达式。
消息 4145,级别 15,状态 1,第 1 行
在应使用条件的上下文(在 'J001' 附近)中指定了非布尔类型的表达式。

(0 行受影响)


请各位告诉我一下那里错了?
exec warenotinmanager('','','','')执行这个就没有问题,请问一下怎么改


------解决方案--------------------
IF Isnull( @wareclause ,'') <> ''
Set @wareclause = ' Where 你的字段=''' + @wareClause +'''
Exec( 'Insert #Ware(warecode,trademarkcode,specification,warename )
 Select warecode ,trademarkcode,specification,warename From sawarecode ' + @wareclause )

下面一个set同理

------解决方案--------------------
你检查一下你的查询语句,一般是在哪儿少了单引号.
(对exec后面的内容不执行而print 一下).
在引用后加上字符串变量的时候,要用一对双引号.
------解决方案--------------------
动态执行的SQL语句有问题,在用EXEC执行动态语句之前把SQL字符串输出来看看就明白了
------解决方案--------------------
探讨

那个原因我找出来了Set @wareclause = ' Where ' + @wareClause where后面多了一个空格,但是问题现在又出现了,这个执行存储过程老是重复执行,超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32)。