2017-02-21 110 views
0

我有一个非常简单的查询,查看大量的位置表并返回有关特定街道的详细信息。我想获得高 - 低的数字填充另一个单行,并选择使用的功能来做到这一点使用函数的SQL Server

CREATE FUNCTION [dbo].[GetMaxStrNo] 
    (@StrFullName varchar) 
RETURNS INT 
AS 
BEGIN 
    RETURN 
     (SELECT 
      MAX(CAST(apt_no AS INT)) 
     FROM 
      location 
     WHERE 
      location_name = @StrFullName 
      AND ISNUMERIC(apt_no) = 1) 
END 
GO 

尝试,因为我可能结果回来为NULL,从我的主要程序调用时

SET @MaxStrNo = dbo.GetMaxStrNo (@StrFullName) 

任何帮助将非常感激。

非常感谢

+0

可能是你传递的值不存在于表 – Sankar

+0

StrFullName varchar是StrFullName varchar(1),所以可能你没有在数据库中的位置名称等于StrFullName的第一个字母 –

回答

1

第一个明显的问题是声明varchar()。在SQL Server中,这应该总是有一个长度:

CREATE FUNCTION [dbo].[GetMaxStrNo](
    @StrFullName varchar(max) 
) RETURNS INT 

你的函数的其余部分有另一个问题。 where子句中的isnumeric()不会阻止错误。使用try_convert()以防止出现错误:

BEGIN 
    RETURN (SELECT MAX(TRY_CONVERT(int, apt_no)) 
      FROM location 
      WHERE location_name = @StrFullName and ISNUMERIC(apt_no) = 1 
      ); 
END; 

isnumeric()where子句在这种情况下可选的。

+0

很多谢谢戈登......第一次工作......所有这些,都需要找专家或者至少翻一本书:)干杯 – TheBigChap