SQL Server使用函数
我有一个非常简单的查询,它查看一个大的位置表,并返回有关特定街道的详细信息。我试图得到高-低数字来填充另一行,并选择使用一个函数来实现这一点SQL Server使用函数,sql,sql-server,function,Sql,Sql Server,Function,我有一个非常简单的查询,它查看一个大的位置表,并返回有关特定街道的详细信息。我试图得到高-低数字来填充另一行,并选择使用一个函数来实现这一点 CREATE FUNCTION [dbo].[GetMaxStrNo] (@StrFullName varchar) RETURNS INT AS BEGIN RETURN (SELECT MAX(CAST(apt_no AS INT)) FROM
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)
任何帮助都将不胜感激
非常感谢第一个明显的问题是声明
varchar()
。在SQL Server中,这应该始终有一个长度:
CREATE FUNCTION [dbo].[GetMaxStrNo](
@StrFullName varchar(max)
) RETURNS INT
函数的其余部分还有另一个问题。where
子句中的isnumeric()。使用try\u convert()
防止出现错误:
BEGIN
RETURN (SELECT MAX(TRY_CONVERT(int, apt_no))
FROM location
WHERE location_name = @StrFullName and ISNUMERIC(apt_no) = 1
);
END;
在这种情况下,where
子句中的isnumeric()
是严格可选的。可能是您正在传递表中不存在的值trfullname varchar是StrFullName varchar(1),因此您在数据库中的位置名称可能不等于StrFullName的第一个字母。。。第一次工作。。。所有这些,哦,需要找个专家或者至少重读一本书:)干杯