我有一个产品名称表,里面有编码、镀种、类别、客户等字段。我想创建一个存储过程来调用符合条件的记录。存储过程如下:
CREATE PROCEDURE [dbo].[query] 
@编码 nchar(16)        在这里为表达方便,用上中文为变量名
@镀种 nchar(16)
@类别 nchar(16)
@客户 nchar(16)
AS
select 编码,产品名称 from cpname where 编码 like %@编码% and 镀种=@镀种
                                       类别=@类别 and 客户=@客户
GO
但在delphi中,我不确定传递那个参数过去。即我有可能只传任意一个或全部或任意组合。我用ADOStoredProc控件的。请问我该怎样做?

解决方案 »

  1.   

    CREATE PROCEDURE [dbo].[query] 
    @编码 nchar(16)='0',        在这里为表达方便,用上中文为变量名
    @镀种 nchar(16)='0',
    @类别 nchar(16)='0'
    @客户 nchar(16)='0'
    AS
    select 编码,产品名称 from cpname where 编码 like %@编码% and 镀种=@镀种
                                           类别=@类别 and 客户=@客户
    GO//--------------------------------------------------
    ADOStoredProc.parambynae('').value:='test';
      

  2.   

    把你的语句改一下就可以做到你的要求了select 编码,产品名称 from cpname where 编码 Like %@编码% and 
                                           镀种 Like %@镀种% and
                                           类别 Like %@类别% and 
                                           客户 Like %@客户%在传递参数的时候,如果@编码需要,就传递模糊值,不需要就传递'',
                      其他的如果需要,就传递准确值,不需要就传递''
      

  3.   

    CREATE PROCEDURE [dbo].[query] 
    @pm nchar(16)
    AS
    select 编码,产品名称 from cpname where  编码  like %@pm%
    GO
    但我在sql上写这个存储过程时为什么保存不了,弹出第四行@pm附近有语法错误呢