ALTER PROCEDURE dbo.QueryRoll
(
@材质 nvarchar(20)='',
@是否可用 nvarchar(8)='',
@入厂日期1 datetime='',
@入厂日期2 datetime='',
@总轧制量1 float='',
@总轧制量2 float='',
)
AS
DECLARE @SQLStr nvarchar(400)=''
SET @SQLStr ='WHERE 1=1'
IF(@材质!='')
SET @SQLStr=@SQLStr+'AND 材质='+@材质 
IF(@是否可用!='')
SET @SQLStr=@SQLStr+'AND 是否可用='+@是否可用 
IF(@入厂日期1!='')
         SET @SQLStr=@SQLStr+' AND 入厂日期 BETWEEN '+convert(nvarchar,@入厂日期1,111)+' AND '+convert  (nvarchar,@入厂日期2,111)
IF(@总轧制量1!='')
         SET @SQLStr=@SQLStr+' AND 总轧制量 BETWEEN cast('+cast(@总轧制量1 as nvarchar)+' as float) AND cast('+cast(@总轧制量2 as nvarchar)+' as float)'
EXEC('SELECT 轧辊编号,材质,重量,适用品种,适用区域,是否精开,生产厂家,硬度,总轧制量,类别,当前辊径,是否可用 FROM BasicInfo '+@SQLStr)
RETURN这是一个多条件搜索,各个条件都可以输入或者不输入
其中别的部分都已经调试成功,但是入厂日期这一块,就是搞不定
请大家帮忙,最好能直接写出代码给我尝试。谢谢各位了

解决方案 »

  1.   

     BETWEEN '''+convert(nvarchar,@入厂日期1,111)+''' 
      

  2.   

    IF(@入厂日期1!='')
        SET @SQLStr=@SQLStr+' AND 入厂日期 BETWEEN '''+convert(nvarchar,@入厂日期1,111)+''' AND '''+convert(nvarchar,@入厂日期2,111)+''
    我改成这样了,
    出现错误
    字符串 '2009/07/22' 后的引号不完整。
    '2009/07/22' 附近有语法错误。 
    这个日期是我输入的日期。
      

  3.   

    ALTER     PROCEDURE QueryRoll 

    @材质 nvarchar(20)=null, 
    @是否可用 nvarchar(8)=null, 
    @入厂日期1 datetime=null, 
    @入厂日期2 datetime=null, 
    @总轧制量1 float=null, 
    @总轧制量2 float=null
    )
    AS 
    DECLARE @SQLStr nvarchar(400)SET @SQLStr ='select 轧辊编号,材质,重量,适用品种,适用区域,是否精开,生产厂家,硬度,总轧制量,类别,当前辊径,是否可用 from dbo.BasicInfo where 1=1' 
    IF(@材质 is not null) 
    SET @SQLStr= @SQLStr+' AND 材质='''+@材质 +''''
    IF(@是否可用 is not null) 
    SET @SQLStr=@SQLStr+' AND 是否可用='''+@是否可用 +''''
    IF(@入厂日期1 is not null) 
            SET @SQLStr=@SQLStr+' AND 入厂日期1 BETWEEN '''+convert(nvarchar(20),@入厂日期1,111)+''''+' AND '''+convert(nvarchar(20),@入厂日期2,111)++'''' 
    IF(@总轧制量1 is not null) 
            SET @SQLStr=@SQLStr+' AND 总轧制量 BETWEEN cast('+cast(@总轧制量1 as nvarchar)+' as float) AND cast('+cast(@总轧制量2 as nvarchar)+' as float)' 
    EXEC(@SQLStr) 
    RETURN 这边其就是加引号的问题你在加引号时可以把它当成是在c#里面写这一些东西那样你应该就会明白这个引号怎么加了。还有你要会利用好vs工具,在里面可以单步执行存储过程(vs 2005可以,2003不知道可不可以),你可以去网上搜一下,怎么单步调试存储过程