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

存储过程中 SQL字符串拼接问题
CREATE   PROCEDURE     T_ZzSwl                                     --/组装实物量_生产
@b_date   datetime=null,
@e_date   datetime=null,
@bc   nvarchar(2)=null,
@Ry   nvarchar(10)=null

AS
begin
set   nocount   on
DECLARE   @sql   varchar(8000) --/sql语句
DECLARE   @BD   varchar(4000) --/开始日期
DECLARE   @ED   varchar(4000) --/结束日期
DECLARE   @BED   varchar(4000) --/开始日期+结束日期

DECLARE   @BDT   varchar(4000) --/开始日期
DECLARE   @EDT   varchar(4000) --/结束日期
DECLARE   @BEDT   varchar(4000) --/开始日期+结束日期


DECLARE   @STJ   varchar(4000) --/开始条件
DECLARE   @ZTJ   varchar(4000) --/中间条件


set   @bc=ltrim(rtrim(@bc))
set   @Ry=ltrim(rtrim(@Ry))

SET   @BD= '   AND   日期   =   ' ' '+convert(varchar(10),@b_date,120)+ ' ' ' ' --/开始日期
SET   @ED= '   AND   日期   =   ' ' '+convert(varchar(10),@e_date,120)+ ' ' ' ' --/结束日期
SET   @BED= '   AND   日期   between   ' ' '+convert(varchar(10),@b_date,120)+ ' ' '   and   ' ' '+convert(varchar(10),@e_date,120)+ ' ' ' ' --/开始+结束日期(sql字符串   开使用)

SET   @BDT= '   OR   日期   =   ' ' '+convert(varchar(10),@b_date,120)+ ' ' ' ' --/开始日期
SET   @EDT= '   OR   日期   =   ' ' '+convert(varchar(10),@e_date,120)+ ' ' ' ' --/结束日期
SET   @BEDT= '   OR   日期   between   ' ' '+convert(varchar(10),@b_date,120)+ ' ' '   and   ' ' '+convert(varchar(10),@e_date,120)+ ' ' ' ' --/开始+结束日期(sql字符串   中间用)


SET   @STJ= '   '
SET   @ZTJ= '   '

SET   @sql= 'SELECT   日期,班次,组长,人员1,人员2,人员3,人员4,学徒   from   表1   where   1=1 '

IF   @b_date   IS   NOT   NULL
SET   @STJ=@BD
SET   @ZTJ=@BDT

IF   @b_date   IS   NULL
SET   @STJ=@ED
SET   @ZTJ=@EDT


IF   @b_date   IS   NOT   NULL   AND   @e_date   IS   NOT   NULL
SET   @STJ=@BED
SET   @ZTJ=@BEDN


IF   @bc   IS   NOT   NULL
SET   @STJ=@STJ+ '   AND   班次   =   ' ' '+@bc+ ' ' ' '
SET   @ZTJ=@ZTJ+ '   AND   班次   =   ' ' '+@bc+ ' ' ' '


IF   @Ry   IS   NOT   NULL
--/问题出在下面这句****************
SET   @sql=@sql+@STJ+ '   AND   组长   =   ' ' '+@Ry+ ' ' ' '+@ZTJ+ '   AND   姓名1   =   ' ' '+@Ry+ ' ' ' '+@ZTJ+ '   AND   姓名2   =   ' ' '+@Ry+ ' ' ' '+@ZTJ+ '   AND   姓名3   =   ' ' '+@Ry+ ' ' ' '+@ZTJ+ '   AND   姓名4   =   ' ' '+@Ry+ ' ' ' '+@ZTJ+ '   AND   学徒   =   ' ' '+@Ry+ ' ' ' '+ 'order   by   日期,班次 '
--如果把   @ZTJ &nbs