2011-08-26 54 views
1

我寫這有三個參數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 

我使用的可選參數,因爲如果沒有參數值我需要得到充分的房源,沒有任何標準,但是當我給剛剛名字我只需要那些匹配標準不休息,但現在它列出了所有

行我想這個問題是某處靠近OR

請問您能幫忙嗎?

如果我改變或與

現在,如果我把第一個名稱爲「ABC」和姓氏和父親的名字黑

...

我得到的所有房源,包括「ABC」爲名字..

我只需要其中具有名字爲「ABC」行不休息

+1

如果定義了'VARCHAR'參數 - 你應該總是** **指定**長度**爲該字符串!因此,使用'VARCHAR(50)'或任何對你有意義的東西 - 否則,你的輸入可能會被截斷... –

+0

我認爲你應該在AND中更改OR。 – Iridio

回答

0

用途,其中如下面的例子條款。

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,'') 
+1

如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼樣本」按鈕(「{}」)以精確地設置格式並進行語法突出顯示! –

1

這將篩選取決於哪個參數提交行:

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
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
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