0

SQL Server 2008 R2には、を使用して呼び出している非常に単純な関数がありますTADStoredProcedure

関数は次のように定義されています。

CREATE FUNCTION [dbo].[GetNextAvailableNo] 
(
    @APrefix nvarchar(10)
)
RETURNS int
AS
BEGIN
    DECLARE @Result int
    SELECT @Result = MAX([No])+1 FROM [Table1] WHERE [Prefix] = @APrefix
    RETURN @Result    
END

私は奇妙な問題に直面しています。この関数を初めて呼び出そうとすると、次のエラーが発生します。

例外クラス:EOleException
例外メッセージ:1行目:無効なプロシージャ番号(0)。1から32767の間でなければなりません。

そして、初めてとは、SQLサービスが開始された後の初めてのことです。その後、すべてが正常に動作します。最初は、これはSQL Server 2008 R2のインストールの問題だと思っていましたが、利用可能なすべてのインストールでこの問題が発生しています。

誰かが何か考えを持っていますか?

4

1 に答える 1

3

選択ステートメントで関数を使用します。

好き

<TAdoQuery>.Sql.Add('SELECT dbo.GetNextAvailablePatNo('+QuotedStr('XX')+')');

サーバーへの最適化のために:

const
  cNextAvailablePatNoScript='SELECT dbo.GetNextAvailablePatNo(:Param)';

...
<TAdoQuery>.Sql.Text:= cNextAvailablePatNoScript;
<TAdoQuery>.Parameters.ParamByName('Param').Value:= 'XX';
<TAdoQuery>.Open; 
...
于 2012-11-14T10:37:41.207 に答える