jacobsan(梅) 你好
@sql 也是变量啊 为什么@sql可以用 @ZTJ 就不能用呢?
@sql和@ZTJ 只是长度不同 一个是sql语句 一个是日期范围 能否详细说一下?

解决方案 »

  1.   

    看错。。
    应该没问题啊,将语句print出来单独运行试试看?
      

  2.   

    @STJ 和 @ZTJ 都是拼接出来的字符串 只不过 @STJ 的内容是以 AND 开头 @ZTJ 的内容是以 OR 开头
      

  3.   

    加了 print @sql 查询分析器里结果如下 
     
    存储过程: jszx.dbo.T_ZzSwl
    返回代码 = 0
      

  4.   

    不输入 @Ry 
    PRINT @sql 结果为SELECT 日期,班次,组长,姓名1,姓名2,姓名3,姓名4,学徒  from 表1 where 1=1 AND 日期 between '2006-05-01' and '2006-07-01'order by 日期,班次,工序名称
      

  5.   

    print @sql 没看到语句??
      

  6.   

    给@Ry赋值的话 就没有输出@sql语句
    好像 if @Ry IS NOT NULL 就没执行似的
      

  7.   

    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
    这样写的话 也可以正常返回结果
      

  8.   

    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
      

  9.   

    如果是因为Where条件而使用动态SQL,一般都可以转化为不用动态SQL的方式.
      

  10.   

    bugchen888(臭虫) 你好问题是我这里的条件很多 比如 日期 可以按一个日期查询 也可以按日期范围查询或者 只按 人名 查询 或者日期+人名 或者 日期范围+人名 还有 产品名称 产品批号 如果能不用动态SQL我也不会出这问题了 谢谢你的回复
      

  11.   

    IF的作用域不对,把希望IF控制的作用域用Begin...End包含起来.