2013-09-08 34 views
12

Arama için kullanmam ve tüm değerleri almayı planladığım bir yordamım var.WHERE yan tümcesinde LIKE ve NULL SQL

Senaryo: geçirilen parametre ise NULL masanın tüm değerleri döndürmelidir ve geçirilen parametre NULL değilse bu gibi olduğu duruma göre değerler döndürmelidir.

// Sorgu: i NULL varsayılır beri yürütmek SQL tarafından string olarak, bu yüzden where fıkrada yazmak gerektiğini istenilen çıktıyı almak için yukarıdaki sorguda

ALTER procedure [dbo].[usp_GetAllCustomerDetails] 
(
@Keyword nvarchar(20) = null 
) 
As 
Begin 

Select CustomerId,CustomerName,CustomerTypeName,CustomerCode,CategoryName,CustomerMobile,CustomerEmail,CustomerAddress,CustomerCity,CustomerState,Pincode 
from tblCustomerMaster CM 
inner join dbo.tblCustomerTypeMaster CTM on CTM.CustomerTypeId = CM.CustomerType 
inner join dbo.tblCategoryMaster CCM on CCM.CategoryId= CM.CustomerCategory 
where CustomerName like '%'[email protected]+'%' 

hiçbir değerleri döndürür ?

ALTER procedure [dbo].[usp_GetAllCustomerDetails] 
(
@Keyword nvarchar(20) = null 
) 
As 
Begin 
SET @Keyword = coalesce(@Keyword,'') 

Select CustomerId,CustomerName,CustomerTypeName,CustomerCode,CategoryName,CustomerMobile,CustomerEmail,CustomerAddress,CustomerCity,CustomerState,Pincode 
from tblCustomerMaster CM 
inner join dbo.tblCustomerTypeMaster CTM on CTM.CustomerTypeId = CM.CustomerType 
inner join dbo.tblCategoryMaster CCM on CCM.CategoryId= CM.CustomerCategory 
where CustomerName like '%'[email protected]+'%' 
+0

Olası kopya https://stackoverflow.com/questions/3924400/like-does-not-accept-null-value –

cevap

16

Sen

where @Keyword is null or CustomerName like '%' + @Keyword + '%' 
+0

Performans sorunlarıyla karşılaşacağınız için böyle bir sorguyu kullanırken dikkatli olun. @Keyword null VEYA bir şey kullandığınızda, tüm dizinler kullanılmaz. Sorgu daha yavaş olacaktır. Buradan okuyun: http://stackoverflow.com/questions/2161573/how-to-optimize-the-use-of-the-or-clause-when-used-with-parameters-sql-server –

+0

siz olabilirsiniz veya olmayabilirsiniz sorgu ile performans sorunları çalıştırmak. Bunu önlemek için bazı teknikler var, ama bu soru, sözdizimi –

1

Sadece bu gibi prosedüre SET @Keyword = coalesce(@Keyword,'') eklemem gerekiyor where fıkra sana böyle koşulunu kullanabilirsiniz bu sorun. Sorun, @KeyWord için varsayılan değerin NULL olmasıdır. Eğer '' için varsayılan ayarları değiştirmek, o zaman sorun ortadan kalkana:

ALTER procedure [dbo].[usp_GetAllCustomerDetails] 
(
@Keyword nvarchar(20) = '' 
) 

olmayan herhangi NULL müşteri adı daha sonra '%%' gibi olurdu.

+0

'un bunu yapması için önerilmediği jenerik hakkında daha fazla olduğuna inanıyorum. "%%" gibi bir müşteri isteğinde bulunduğunuz ve bu, tablodaki tüm düz seçimlerle aynı olmaz. –

+0

@RomanPekar Bu sadece 'NULL' değerlerini hariç tutuyor, değil mi? ya da başka bir fark olacak mı? –

4

Sadece çözme başka bir yol işaret etmek istiyorum:

İlgili konular