Хранимая процедура поиска клиента - PullRequest
1 голос
/ 26 августа 2011

Я пишу хранимую процедуру поиска клиента, которая имеет три параметра firstname, lastname, fathers name, все они varchar

Я написал, как показано ниже:

CREATE PROCEDURE [dbo].[SearchCustomer] 
(  
  @p_FirstName varchar = NULL
  ,@p_LastName varchar = NULL
  ,@p_FatherFirstName varchar = NULL
)
AS 
BEGIN 
  SET NOCOUNT ON 
  SELECT [CustomerID]
        ,[CustomerTitle]
        ,[FirstName]
        ,[MiddleName]
        ,[LastName]
        ,[FatherFirstName]
        ,[EmailId]
     FROM [Customer] 
       WHERE [FirstName] LIKE COALESCE(@p_FirstName,'%')     
      OR [LastName] LIKE COALESCE @p_LastName,'%')
      OR [FatherFirstName] LIKE COALESCE(@p_FatherFirstName,'%')
  END

Я использую необязательные параметры, потому что если нет значения параметра, мне нужно получить полный список без каких-либо критериев, но когда я даю только имя, мне нужны только те строки, которые соответствуют этим критериям, а не остальные, но теперь в нем перечислены все

Я думаю, проблема где-то рядом ИЛИ

Не могли бы вы помочь?

Если я изменил ИЛИ на И

Теперь, если я поставлю имя как 'abc', а фамилия и имя отца будут черными ...

Я получаю все записи, включая 'abc' в качестве имени ..

мне нужна только строка, имя которой 'abc', а не остальные

Ответы [ 4 ]

1 голос
/ 26 августа 2011

Это отфильтрует строки в зависимости от того, какие параметры были отправлены:

CREATE PROCEDURE [dbo].[SearchCustomer] 
(  
  @p_FirstName varchar(50) = NULL
 ,@p_LastName varchar(50) = NULL
 ,@p_FatherFirstName varchar(50) = NULL
)
AS 
BEGIN 

  SET NOCOUNT ON 
  SELECT [CustomerID]
        ,[CustomerTitle]
        ,[FirstName]
        ,[MiddleName]
        ,[LastName]
        ,[FatherFirstName]
        ,[EmailId]
     FROM [Customer] 
   WHERE [FirstName] LIKE COALESCE(@p_FirstName + '%', FirstName)     
   AND [LastName] LIKE COALESCE (@p_LastName + '%', LastName)
   AND [FatherFirstName] LIKE COALESCE(@p_FatherFirstName + '%', FatherFirstName)
  END
GO
0 голосов
/ 26 августа 2011
CREATE PROCEDURE [dbo].[SearchCustomer] 
(  
  @p_FirstName varchar(50) = NULL
  ,@p_LastName varchar(50) = NULL
  ,@p_FatherFirstName varchar(50) = NULL
)
AS 
BEGIN 
SET NOCOUNT ON 

SELECT  [CustomerID]
        ,[CustomerTitle]
        ,[FirstName]
        ,[MiddleName]
        ,[LastName]
        ,[FatherFirstName]
        ,[EmailId]
FROM    [Customer] 
WHERE   ([FirstName] = @p_FirstName OR @p_FirstName IS NULL)
    AND ([LastName] = @p_LastName OR @p_LastName IS NULL)
    AND ([FatherFirstName] = @p_FatherFirstName OR @p_FatherFirstName IS NULL)

END
0 голосов
/ 26 августа 2011
CREATE PROCEDURE [dbo].[SearchCustomer]  
(   
  @p_FirstName varchar = NULL 
  ,@p_LastName varchar = NULL 
  ,@p_FatherFirstName varchar = NULL 
) 
AS  
BEGIN  
  SET NOCOUNT ON  
  SELECT [CustomerID] 
        ,[CustomerTitle] 
        ,[FirstName] 
        ,[MiddleName] 
        ,[LastName] 
        ,[FatherFirstName] 
        ,[EmailId] 
     FROM [Customer]  
       WHERE [FirstName] LIKE COALESCE(@p_FirstName,'%')      
       OR (FirstName is NULL
      AND [LastName] LIKE COALESCE(@p_LastName,'%') 
      AND [FatherFirstName] LIKE COALESCE(@p_FatherFirstName,'%'))
  END 
0 голосов
/ 26 августа 2011

Используйте предложение where, как в примере ниже.

 WHERE (@p_FirstName=''  or [FirstName] LIKE COALESCE(@p_FirstName,'%'))     
      OR (@p_LastName='' or [LastName] LIKE COALESCE @p_LastName,'%'))
      OR (@p_FatherFirstName='' or [FatherFirstName] LIKE COALESCE(@p_FatherFirstName,'%'))

и задайте все ваши параметры '', если они равны NULL, используя следующий синтаксис.

SET @p_FirstName=ISNULL(@p_FirstName,'')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...