@STJ 和 @ZTJ 都是拼接出来的字符串 只不过 @STJ 的内容是以 AND 开头 @ZTJ 的内容是以 OR 开头
加了 print @sql 查询分析器里结果如下
存储过程: jszx.dbo.T_ZzSwl 返回代码 = 0
不输入 @Ry PRINT @sql 结果为SELECT 日期,班次,组长,姓名1,姓名2,姓名3,姓名4,学徒 from 表1 where 1=1 AND 日期 between '2006-05-01' and '2006-07-01'order by 日期,班次,工序名称
print @sql 没看到语句??
给@Ry赋值的话 就没有输出@sql语句 好像 if @Ry IS NOT NULL 就没执行似的
IF @Ry IS NOT NULL set @ZTJ=@STJ+' AND 组长 = '''+@Ry+''''+' or 日期 between '''+convert(varchar(10),@b_date,120)+''' and '''+convert(varchar(10),@e_date,120)+''''+' AND 姓名1 = '''+@Ry+'''' SET @sql=@sql+@ZTJ 这样写的话 也可以正常返回结果
CREATE PROCEDURE T_ZzSwl --/组装实物量_生产 @b_date datetime=null, @e_date datetime=null, @bc nvarchar(2)=null, @Ry nvarchar(10)=null AS BEGIN SET NOCOUNT ONSET @bc=LTRIM(RTRIM(@bc)) SET @Ry=LTRIM(RTRIM(@Ry))SELECT 日期,班次,组长,人员1,人员2,人员3,人员4,学徒 FROM 表1 WHERE 1=1 AND (DATEDIFF(day,@b_date,日期)>=0 OR @b_date IS NULL) AND (DATEDIFF(day,日期,@e_date)>=0 OR @e_date IS NULL) AND (班次=@BC OR @bc IS NULL) AND (姓名1=@Ry OR 姓名2=@Ry OR 姓名3=@Ry OR 姓名4=@Ry OR 学徒=@Ry OR @Ry IS NULL) ORDER BY 日期,班次SET NOCOUNT OFF END
应该没问题啊,将语句print出来单独运行试试看?
存储过程: jszx.dbo.T_ZzSwl
返回代码 = 0
PRINT @sql 结果为SELECT 日期,班次,组长,姓名1,姓名2,姓名3,姓名4,学徒 from 表1 where 1=1 AND 日期 between '2006-05-01' and '2006-07-01'order by 日期,班次,工序名称
好像 if @Ry IS NOT NULL 就没执行似的
set @ZTJ=@STJ+' AND 组长 = '''+@Ry+''''+' or 日期 between '''+convert(varchar(10),@b_date,120)+''' and '''+convert(varchar(10),@e_date,120)+''''+' AND 姓名1 = '''+@Ry+''''
SET @sql=@sql+@ZTJ
这样写的话 也可以正常返回结果
@b_date datetime=null,
@e_date datetime=null,
@bc nvarchar(2)=null,
@Ry nvarchar(10)=null
AS
BEGIN
SET NOCOUNT ONSET @bc=LTRIM(RTRIM(@bc))
SET @Ry=LTRIM(RTRIM(@Ry))SELECT 日期,班次,组长,人员1,人员2,人员3,人员4,学徒
FROM 表1
WHERE 1=1
AND (DATEDIFF(day,@b_date,日期)>=0 OR @b_date IS NULL)
AND (DATEDIFF(day,日期,@e_date)>=0 OR @e_date IS NULL)
AND (班次=@BC OR @bc IS NULL)
AND (姓名1=@Ry OR 姓名2=@Ry OR 姓名3=@Ry OR 姓名4=@Ry OR 学徒=@Ry OR @Ry IS NULL)
ORDER BY 日期,班次SET NOCOUNT OFF
END