2016-11-22 43 views
0

我有四個表:創建並且比在SQL Server參數的詳細執行功能

1 dbo.Projects(ID,項目名,區,PaymentSystem,location.id,purpose.id,types.id等)

2- dbo.Locations(ID,地點名稱)

3- dbo.Purpose(ID,Purposename)

4- dbo.Types(ID,typname)

我有一個搜索標準,這個標準我s充滿了數據庫表中的數據:位置,目的和類型,還有最大值和最小值的文本框。

我將與所有領域和最大值,最小值搜索 - 我達到這個查詢,但錯過了查詢來獲取或過濾器的最大和最小:

ALTER FUNCTION SearchProjects (
@location NVARCHAR(50), 
@purpose NVARCHAR(50), 
@type NVARCHAR(50), 
@max nvarchar(50), 
@min nvarchar(50)) 
RETURNS TABLE 
AS 
    RETURN 
    (
    SELECT p.ProjectName, 
     p.Areas, 
     p.PaymentSystem, 
     p.ReceivedDate,  
     p.PropertyClassification, 
     p.ProjectImage,   
     l.LocationName, 
     Pur.PurposeName,    
     t.TypeName 
FROM dbo.Projects AS p 
LEFT JOIN dbo.Locations AS l ON p.LocationID = l.ID  
LEFT JOIN dbo.Purpose pur ON p.PurposeID = pur.ID 
LEFT JOIN dbo.[Types] AS t ON p.TypeID = t.ID 
WHERE UPPER(ISNULL(l.LocationName,N'')) LIKE N'%' + UPPER(@location) + '%' 
AND UPPER(ISNULL(pur.PurposeName,N'')) LIKE N'%' + UPPER(@purpose) + '%' 
AND UPPER(ISNULL(t.TypeName,N'')) LIKE N'%' + UPPER(@type) + '%' 
AND p.Areas like @max 
AND p.Areas like @min 
) 
GO 
SELECT * FROM dbo.SearchProjects('','','','200','250'); 
+1

你在問什麼?請具體說明。 –

+0

我想通過最大和最小值的功能,然後返回過濾器的面積列的值,如果我在區域列值從100到300在每個記錄我想要通過最小值100和最大值200然後得到所有結果匹配與此值 – hashim

+0

[在SQL Server中創建和執行函數]的可能重複(http://stackoverflow.com/questions/40719540/create-and-execute-function-in-sql-server) –

回答

1

從要篩選您area列我的理解爲maxmin值,你可以通過使用BETWEEN

AND p.Areas BETWEEN @min AND @max 

所以你WHERE條件看起來就像實現,

WHERE 
    UPPER(ISNULL(l.LocationName,N'')) LIKE N'%' + UPPER(@location) + '%' 
    AND UPPER(ISNULL(pur.PurposeName,N'')) LIKE N'%' + UPPER(@purpose) + '%' 
    AND UPPER(ISNULL(t.TypeName,N'')) LIKE N'%' + UPPER(@type) + '%' 
    AND p.Areas BETWEEN @min AND @max 
+0

是這是我需要的,工作很好謝謝你 – hashim

+0

@hashim你的歡迎。快樂編碼。 –

+0

我需要別的東西,當我打電話給這條線獲得所有結果:SELECT FROM dbo.SearchProjects('','','','',''); – hashim