2017-02-21 68 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