2017-02-21 1 views
0

私は場所の大きなテーブルを見て、特定の通りの詳細を返す非常に単純なクエリを持っています。別の単一の行を移入するために、低い数字を、私のメインの手順機能を使用しているSQL Server

から呼び出されたときに、私は結果がNULLとして戻ってくる可能性があるとして、この

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 

を試し行う関数を使用することを選択している - 私は高い取得しようとしています

SET @MaxStrNo = dbo.GetMaxStrNo (@StrFullName) 

ご協力いただき誠にありがとうございます。

感謝

+0

テーブルに存在しない値を渡している可能性があります – Sankar

+0

StrFullName varcharはStrFullName varchar(1)なので、おそらくstrFullNameの最初の文字に等しいlocation_nameはデータベースにありません –

答えて

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

Thanks Gordon ...最初に働いた...それらのすべてのohoursは、専門家を取得するか、少なくとも本をrewadする必要があります:)乾杯 – TheBigChap

関連する問題