我现在写的是
CREATE PROCEDURE SZ @tmStart int,@tmEnd int 
AS
begin 
SELECT 年,* from SC WHERE  @tmStart<=年 and @tmEnd >= 年
END
GO
这样我每次都要写两个参数进行执行查询,
那么当我输入一个参数的时候就把当年的查找出来,输入两个的时候就把这个范围的找出来
就是输入一个参数也能查询,两个也能查询,最少一个条件
应该怎么弄呢

解决方案 »

  1.   

    SELECT 年,* from SC WHERE isnull(@tmStart,年)<=年 and isnull(@tmEnd,年) >= 年
      

  2.   

    CREATE PROCEDURE SZ (@tmStart int,@tmEnd int default year(getdate())
    AS
    begin  
    SELECT 年,* from SC WHERE @tmStart<=年 and @tmEnd >= 年
    END
    GO
      

  3.   

    设default值
    如create proc test
       @a int=0,
       @b int=0
    AS
     ...
      

  4.   

    CREATE PROCEDURE SZ
    @tmStart INT,
    @tmEnd INT
    AS
    BEGIN
    IF @tmStart+@tmEnd IS NOT NULL
    SELECT 年,* 
    FROM SC
    WHERE @tmStart<= 年
    AND @tmEnd>= 年
    ELSE IF isnull(@tmStart,@tmEnd) IS NOT NULL
    SELECT 年,* 
    FROM SC
    WHERE 年=isnull(@tmStart,@tmEnd)
    ELSE
    SELECT 年,* 
    FROM SC
    END
    GO
      

  5.   

    组织成一个条件传入 CREATE PROCEDURE varchar(8000) @vswhere
    AS
    begin  
    exec(
    'SELECT 年,* from SC WHERE ' +@vswhere)
    END
    GO
      

  6.   

    SELECT 年,* from SC WHERE 年 between isnull(@tmStart,1900) and isnull(@tmEnd,YEAR(GETDATE()))
      

  7.   

    CREATE PROCEDURE SZ @tmStart int,@tmEnd int  
    AS
    declare @sql varchar(4000)
    set @sql='SELECT 年,* from SC WHERE 1=1 '
    if @tmStart<>null
    begin
    set @sql= @sql+'AND' +@tmStart+'<=年 '
    end
    if @tmEnd<>null 
     begin 
    set @sql=@sql+'AND'+ @tmEnd+' >= 年'
    end
      

  8.   

    指定第二个参数缺省为当前年
    CREATE PROCEDURE SZ @tmStart int,@tmEnd int = year(getdate()) 
    AS
    begin  
    SELECT 年,* from SC WHERE @tmStart<=年 and @tmEnd >= 年
    END
    GO
      

  9.   

    Tony哥
    你这个当我执行exe SZ 2010带一个参数报错呀
    需要参数 '@tmEnd',但未提供该参数。
      

  10.   


    CREATE PROCEDURE SZ
        @tmStart INT=NULL,
        @tmEnd INT=NULL
    AS
    BEGIN
        IF @tmStart+@tmEnd IS NOT NULL
            SELECT 年,* 
            FROM SC
            WHERE @tmStart<= 年
                AND @tmEnd>= 年    
        ELSE IF isnull(@tmStart,@tmEnd) IS NOT NULL
            SELECT 年,* 
            FROM SC
            WHERE 年=isnull(@tmStart,@tmEnd)
        ELSE
            SELECT 年,* 
            FROM SC
    END
    GO那你这样。
      

  11.   


    Tony哥果然厉害。。搞定!!
      

  12.   

    Tony哥,IF @tmStart+@tmEnd IS NOT NULL这个是判断他俩有一个为空就可以吗?
    ELSE IF isnull(@tmStart,@tmEnd) IS NOT NULL
    。。
    WHERE 年=isnull(@tmStart,@tmEnd)
    这什么意思啊,给小弟解释下吧