【问题标题】:Create and execute function with more than parameters in SQL Server在 SQL Server 中创建和执行具有多个参数的函数
【发布时间】:2016-12-19 19:11:14
【问题描述】:

我有四张桌子:

1-dbo.Projects(id,ProjectName,Areas,PaymentSystem,location.id, purpose.id,types.id,etc)

2-dbo.Locations(id,位置名称)

3-dbo.Purpose(id,Purposename)

4-dbo.Types (id, typname)

我有一个搜索条件,这个条件由数据库表中的数据填充:位置、目的和类型,还有用于最大值和最小值的文本框。

我将搜索所有字段和最大值、最小值 - 我到达了这个查询,但错过了获取或过滤最大值和最小值的查询:

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');

【问题讨论】:

  • 你在问什么?请具体。
  • 我想将最大值和最小值传递给函数,然后返回带有值的区域列上的过滤器,如果我在每条记录中的区域列值从 100 到 300,我想传递最小值 100 和最大值值 200 然后获取与此值匹配的所有结果
  • @IvanStarostin 没有重复问题不同

标签: sql-server tsql sql-server-2012


【解决方案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

【讨论】:

  • 当我调用此行获取所有结果时,我需要其他东西:SELECT FROM dbo.SearchProjects('','','','','');
  • 如果我没有通过最小值或最大值得到所有结果
  • @hashim 这会发生,因为您没有传递任何东西来过滤掉数据。如果您需要其他任何内容,请详细说明问题。
  • 好的,不,我尝试选择不传递值没有结果返回
猜你喜欢
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多