表A
  F_name  F_Flag(bit型)
   aaa      1
   bbb      0求一存贮过程,传入参数@Flag=1把F_Flag=1的记录查询出来,
传入参数@Flag=0 查询出F_Flag=0的记录,
传入参数@Flag=-1  查询出所有记录 

解决方案 »

  1.   


    create proc wsp
    @flag int
    as
    if(@flag=1 or @flag=0)
         select * from a where flag=@flag
    else
         select * from a --调用存储过程exec wsp 1
      

  2.   


    --字段写错。create proc wsp
    @flag int
    as
    if(@flag=1 or @flag=0)
         select * from a where F_Flag=@flag
    else
         select * from a --调用存储过程exec wsp 1
      

  3.   

    --这个意思不成?
    create proc wsp
    @flag int
    as
    declare @s varchar(100)if(@flag=1 or @flag=0)
         set @s = 'F_Flag='+ltrim(@flag)
    exec('select * from a where '+ @s) --调用存储过程exec wsp 1
      

  4.   

    估计要把Where放在前面吧,呵呵if(@flag=1 or @flag=0) 
         set @s = ' where F_Flag='+ltrim(@flag) 
    exec(' select * from a  '+ @s)  
      

  5.   

    有什么分别嘛,呵呵,又没有什么复杂的判断  
    set @s = ' select * from a  '
    if(@flag=1 or @flag=0) 
         set @s = @s +' where F_Flag='+ltrim(@flag) exec(@S)
      

  6.   

    其实这样的存储过程有很多写法,但如果要写高效的还需要斟酌,请参照
    /*表A 
      F_name  F_Flag(bit型) 
       aaa      1 
       bbb      0 求一存贮过程,传入参数@Flag=1把F_Flag=1的记录查询出来, 
    传入参数@Flag=0 查询出F_Flag=0的记录, 
    传入参数@Flag=-1  查询出所有记录 */
    use tempdb
    goif object_id('temp..#') is not null
    drop table #
    create table #(f_name varchar(10),f_flag bit )insert into #
    select 'aaa',1
    union all
    select 'bbb',0select * from  # drop procedure  dbo.query_data
    go
    create procedure dbo.query_data
    @flag int
    as
    begin
    set nocount on
    if @flag in (1,0)
    select * from # where f_flag = cast(@flag as bit)
    else if @flag=-1
    select * from #
    else
    raiserror('you intput @plag-=%d vlaue is error',16,1,@flag)
    end
    go--exec dbo.query_data 0
    --exec dbo.query_data 1
    --exec dbo.query_data -1
    --exec dbo.query_data -4