我写了一个存储过程是这样的 我想实现当没有输入DZ里的姓名时,也可以根据复本控制号显示查询这本书,但是我没有输入这个DZ的姓名时,就不能显示,可能是这里写错了:那怎么写呢?如里去掉下面的话,那输入DZ里的姓名就没有了,请教!!!!!!!
dbo.JY ON dbo.FB.复本控制号 = dbo.JY.复本控制号 INNER JOIN
dbo.DZ ON dbo.JY.借书证号 = dbo.DZ.借书证号 下面是存储过程
CREATE PROCEDURE p_selectSK
@复本控制号 varchar(8)='%'
AS
begin
select dbo.FB.复本控制号, dbo.YB.书名, dbo.FL.类别, dbo.YB.作者, dbo.YB.出版社, dbo.YB.价格, dbo.YB.页数, dbo.YB.版次, dbo.YB.语种, dbo.DZ.姓名 AS 借书人
FROM dbo.FL INNER JOIN
dbo.YB ON dbo.FL.分类号 = dbo.YB.索书号 INNER JOIN
dbo.FB ON dbo.YB.样本控制号 = dbo.FB.样本控制号 INNER JOIN
dbo.JY ON dbo.FB.复本控制号 = dbo.JY.复本控制号 INNER JOIN
dbo.DZ ON dbo.JY.借书证号 = dbo.DZ.借书证号 where FB.复本控制号 like @复本控制号
end
GO 

解决方案 »

  1.   

    CREATE PROCEDURE p_selectSK
    @复本控制号 varchar(8)='%'
    AS
    begin
    declare @cc varchar(9)
    select @cc = IsNull(@复本控制号,'')+'%'  
    select dbo.FB.复本控制号, dbo.YB.书名, dbo.FL.类别, dbo.YB.作者, dbo.YB.出版社, dbo.YB.价格, dbo.YB.页数, dbo.YB.版次, dbo.YB.语种, dbo.DZ.姓名 AS 借书人
    FROM dbo.FL INNER JOIN
    dbo.YB ON dbo.FL.分类号 = dbo.YB.索书号 INNER JOIN
    dbo.FB ON dbo.YB.样本控制号 = dbo.FB.样本控制号 INNER JOIN
    dbo.JY ON dbo.FB.复本控制号 = dbo.JY.复本控制号 INNER JOIN
    dbo.DZ ON dbo.JY.借书证号 = dbo.DZ.借书证号 where FB.复本控制号 like @cc
    end
      

  2.   

    CREATE PROCEDURE p_selectSK
    @复本控制号 varchar(8)
    AS
    begin
    select dbo.FB.复本控制号, dbo.YB.书名, dbo.FL.类别, dbo.YB.作者, dbo.YB.出版社, dbo.YB.价格, dbo.YB.页数, dbo.YB.版次, dbo.YB.语种, dbo.DZ.姓名 AS 借书人
    FROM dbo.FL INNER JOIN
    dbo.YB ON dbo.FL.分类号 = dbo.YB.索书号 INNER JOIN
    dbo.FB ON dbo.YB.样本控制号 = dbo.FB.样本控制号 INNER JOIN
    dbo.JY ON dbo.FB.复本控制号 = dbo.JY.复本控制号 INNER JOIN
    dbo.DZ ON dbo.JY.借书证号 = dbo.DZ.借书证号 where (FB.复本控制号 like @复本控制号) or (@复本控制号 is null)
    end
    GO
      

  3.   

    可能我没说清楚,我的问题是:我的DZ表里有一个姓名的字段,当我不输入这个字段时
    就不能显示,YB,FB前面几个表的字段就不能显示,而当我输入DZ表里的姓名字段时
    就可以显示查询了,我要的功能是我不输入DZ表里的姓名这个字段其它的YB,FB也可以显示
    DZ表里的姓名就没有内容。
    问题是我用了dbo.JY ON dbo.FB.复本控制号 = dbo.JY.复本控制号 INNER JOIN
    dbo.DZ ON dbo.JY.借书证号 = dbo.DZ.借书证号
     根据主外鍵的联系所显示的
    不要这里的话几个表又不能联起来