求一多条件查询存储过程存储过程,传参变量为表的列名 随便 几个 最好大于三
能实现 用传参变量 传参 查询出对应的结果(查询结果结构还是下表结构)
一个能查出,多个也能查
表如下
YgGh     YgZb    YgBusyID YgPostID    SzDz   YgPw
11786 AJ.05.04 A04 003 SZ/深圳 SQ
10707 AY.03.12 A04 035 TS/唐山 WQN
10930 AJ.05.04 A04 034 SZ/深圳 JSF
12336 AE.12 A04 039 CD/成都 LY
10951 AE.02.01 A04 020 FZ/福州 WXQ
10520 AJ.05.04.02 A04 003 GZ/广州 XZB
10575 AY.08.03.01 A04 030 SY/沈阳 CW
10351 AJ.03 A04 049 ZZ/郑州 XL
10904 AJ.05.04.02 A04 003 GZ/广州 SLL
10557 AJ.10.05 A08 001 ST/汕头 ZJY
11624 AE.06.04 A04 003 WH/武汉 GLH
10705 AJ.05 A04 030 FZ/福州 LRC
12382 AY.08 A04 045 QD/青岛 ZPP
10958 AC.03 A04 010 FZ/福州 YXM
11171 AJ.02.03 A04 039 XM/厦门 WHP
10481 AJ.10.03 A04 045 GZ/广州 SJ
11644 AC.02 A04 010 FZ/福州 LLJ
11401 AJ.05.15 A04 001 FZ/福州 LXZ
11542 AJ.02.03 A04 033 XM/厦门 ZSN
11099 AJ.05.04 A04 061 SZ/深圳 ZXQ

解决方案 »

  1.   


    create PROCEDURE [dbo].[proc_test]
    (
    @col1 varchar(10),
    @col2 varchar(10),
    @col3 varchar(10)
    )
    AS
    BEGIN
    SET NOCOUNT ON;
    declare @sql varchar(1000)set @sql='select a'if isnull(@col1,'')<>''
    set @sql=@sql+','+@col1
    if isnull(@col2,'')<>''
    set @sql=@sql+','+@col2
    if isnull(@col3,'')<>''
    set @sql=@sql+','+@col3set @sql=@sql+' from tb '
    exec (@sql)END--调用例子,假定tb有a,b,c,d三列,exec proc_test 'b','','',sql 2005测试通过
    --找一列,比如a作为必选列放在最开头
    --然后判断传入参数是否有值,有值就拼sql,无值就pass...
    --提供个思路而已,其他要加循环要加条件自己改就是了
      

  2.   

    create PROCEDURE [dbo].[proc_test]
    (
            @col1 varchar(10),
            @col2 varchar(10),
            @col3 varchar(10)
    )
    AS
    BEGIN
    declare @sql varchar(1000)
    @sql='select a,'+isnull(@col1+',','')+isnull(@col2+',','')+isnull(@col3,'')+'from tb'
    exec (@sql)
    END
      

  3.   

    色狼兄,你这样b,c,d都为空时会因为有个逗号报错哟
      

  4.   

    还有,isnull(@col1+',','')这个永远不会为空
      

  5.   

    说的是啊
    create PROCEDURE [dbo].[proc_test]
    (
            @col1 varchar(10),
            @col2 varchar(10),
            @col3 varchar(10)
    )
    AS
    BEGIN
    declare @sql varchar(1000)
    @sql='select a'+isnull(','+@col1,'')+isnull(','+@col2,'')+isnull(','+@col3,'')+' from tb'
    exec (@sql)
    END