这是一段用BCB写的程序代码
SELECT * FROM ZS_Banci B INNER JOIN
 ZS_Ycl X ON B.gxIdB = X.gxIdYx INNER JOIN
 ZS_ManhourPay M ON B.gxIdB = M.gxIdM INNER JOIN
 ZS_Inhouse I ON B.gxIdB = I.gxIdI INNER JOIN
 ZS_Shengchan S ON B.gxIdB = S.gxIdSc LEFT OUTER JOIN
 (SELECT * FROM GXSystem..ZS_InfoPart LEFT JOIN
 GXSystem..ZS_InfoYcl ON gxNameYclZ = gxNameY) DERIVEDTBL ON
 B.gxNamePartB = DERIVEDTBL.gxNameZ
 where
后边的就是根据界面上的某个ComboBox是否有值进行组合条件查询
我所困惑的就是碰上组合条件查询的存储过程该怎么写?

解决方案 »

  1.   

    举一个简单的例子
    select * from table1
    如果Edit1->Text!="";
    则SQL语句变为select * from table1 where col1=Edit->Text;
    就是如何在存储过程中加入判断性的选择呢?
      

  2.   

    条件你自己传,不要加where。
    存储过程如下:create procedure test
    @where nvarchar(4000)as
    declare @sql nvarchar(4000)
    set @sql='SELECT * FROM ZS_Banci B INNER JOIN
    ZS_Ycl X ON B.gxIdB = X.gxIdYx INNER JOIN
    ZS_ManhourPay M ON B.gxIdB = M.gxIdM INNER JOIN
    ZS_Inhouse I ON B.gxIdB = I.gxIdI INNER JOIN
    ZS_Shengchan S ON B.gxIdB = S.gxIdSc LEFT OUTER JOIN
    (SELECT * FROM GXSystem..ZS_InfoPart LEFT JOIN
    GXSystem..ZS_InfoYcl ON gxNameYclZ = gxNameY) DERIVEDTBL ON
    B.gxNamePartB = DERIVEDTBL.gxNameZ'
    if(@where<>'')
    set @sql=@sql+' where ' +@whereexec(@sql)go
      

  3.   

    举一个简单的例子
    select * from table1
    如果Edit1->Text!="";
    则SQL语句变为select * from table1 where col1=Edit->Text;
    就是如何在存储过程中加入判断性的选择呢?------------if  条件 
       begin
         ...........
       end
    else
       begin
        ..............
       end
      

  4.   

    不用where 也可以.create procedure test
    @where nvarchar(4000)as
    declare @sql nvarchar(4000)
    set @sql='SELECT * FROM ZS_Banci B INNER JOIN
    ZS_Ycl X ON B.gxIdB = X.gxIdYx INNER JOIN
    ZS_ManhourPay M ON B.gxIdB = M.gxIdM INNER JOIN
    ZS_Inhouse I ON B.gxIdB = I.gxIdI INNER JOIN
    ZS_Shengchan S ON B.gxIdB = S.gxIdSc LEFT OUTER JOIN
    (SELECT * FROM GXSystem..ZS_InfoPart LEFT JOIN
    GXSystem..ZS_InfoYcl ON gxNameYclZ = gxNameY) DERIVEDTBL ON
    B.gxNamePartB = DERIVEDTBL.gxNameZ'
    if(@where<>'')
    set @sql=@sql+@whereexec(@sql)go
      

  5.   

    @where 变量在程序代码里面得出么?
    不能在存储过程里面直接通过判断等操作直接得出么?