Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server使用函数_Sql_Sql Server_Function - Fatal编程技术网

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的第一个字母。。。第一次工作。。。所有这些,哦,需要找个专家或者至少重读一本书:)干杯