0

SQL での SP の構文を教えてください。

これが私のコードです:

CREATE PROCEDURE usp_GetValue
(
    @ID VARCHAR(10),
    @Description VARCHAR(10)
)

AS

BEGIN
    return @ID + @Description
END

CREATE PROCEDURE usp_InsertValue
(
    @ID VARCHAR(10),
    @FirstName VARCHAR(50),
    @LastName VARCHAR(50),
    @Description VARCHAR(10),
    @Comment VARCHAR(max)
)

AS

BEGIN
    Declare @v_Value VARCHAR(15)
    Set @v_Value = usp_GetValue(@ID, @Description)

END

usp_InsertValue SP で、変数を宣言して設定したいと考えています。変数が宣言されたら、パラメーターを使用して別の SP を呼び出して、宣言された変数の値を設定します。

構文がわかりません。助けてもらえますか?

アップデート

関数を使用して上記のコードを更新しました。usp_GetValue 関数から @v_Value を設定するにはどうすればよいですか。

このエラーが発生しています:

「usp_GetValue」は認識される組み込み関数名ではありません。

更新2

ここに私の完全なコードがあります:

CREATE PROCEDURE usp_PersonCategoryLookupTesting
(
    @ID VARCHAR(10),
    @Description VARCHAR(10),
    @res  VARCHAR(10) OUTPUT
)

AS

BEGIN
    return @ID + @Description
END

CREATE PROCEDURE usp_InsertPersonTesting
(
    @IDTest VARCHAR(10),
    @FirstName VARCHAR(50),
    @LastName VARCHAR(50),
    @AddressLine1 VARCHAR(50),
    @AddressLine2 VARCHAR(50),
    @AddressLine3 VARCHAR(50),
    @MobilePhone VARCHAR(20),
    @HomePhone VARCHAR(20),
    @Description VARCHAR(10),
    @Comment VARCHAR(max)
)

AS

BEGIN
    Declare @PersonCategory VARCHAR(15)
    EXEC usp_PersonCategoryLookupTest @ID, @Description, @PersonCategory
    INSERT INTO Person(FirstName, LastName, AddressLine1, AddressLine2, AddressLine3, MobilePhone, HomePhone, DateModified, PersonCategory, Comment)
    VALUES (@FirstName, @LastName, @AddressLine1, @AddressLine2, @AddressLine3, @MobilePhone, @HomePhone, GETDATE (), @PersonCategory, @Comment)
END

SQL コードを呼び出しているアプリケーションで次のエラーが発生します。

varchar 値 '123Client' をデータ型 int に変換するときに変換に失敗しました。

@IDTest と @Description に値「123」と「Client」を使用しています。

4

2 に答える 2

0

出力パラメーターは適切な方法である必要があると思います: この投稿を参照してください: ストアド プロシージャは varchar を返します

CREATE PROCEDURE usp_GetValue
(
    @ID VARCHAR(10),
    @Description VARCHAR(10),
    @res  VARCHAR(10) OUTPUT
)

AS

BEGIN
    return @ID + @Description
END

CREATE PROCEDURE usp_InsertValue
(
    @ID VARCHAR(10),
    @FirstName VARCHAR(50),
    @LastName VARCHAR(50),
    @Description VARCHAR(10),
    @Comment VARCHAR(max)
)

AS

BEGIN
    Declare @v_Value VARCHAR(15)
    EXEC usp_GetValue @ID, @Description, @v_Value
    -- use @v_Value here...

END
于 2013-07-20T14:13:11.643 に答える
0

ストアドプロシージャではなく、そのような関数のみを使用できます。ストアド プロシージャは整数値のみを返します。

SP の場合、値を取得するために out パラメータを作成する必要があります。このシナリオでは、関数を作成することをお勧めします

CREATE FUNCTION usp_GetValue
(
    @ID VARCHAR(10),
    @Description VARCHAR(10),
)
RETURNS VARCHAR(50)
AS

BEGIN
    return @ID + @Description
END

次に、それを呼び出します。

SET @v_value = dbo.usp_GetValue('John','Doe')  --output: John Doe

これにふさわしくないSPが欲しいと主張する場合、2つの方法があります

1) out パラメータ

CREATE PROCEDURE usp_GetValue
(
    @ID VARCHAR(10),
    @Description VARCHAR(10),
    @Result varchar(20) OUTPUT
)

AS

BEGIN
    SET @Result = @ID + @Description
END

次に、それを呼び出します。

    Declare @v_Value VARCHAR(15)
    Set @v_Value = EXEC usp_GetValue @ID,  @Description, @v_Value OUTPUT

2) そこから選ぶ

CREATE PROCEDURE usp_GetValue
(
    @ID VARCHAR(10),
    @Description VARCHAR(10)
)

AS

BEGIN
    SELECT @ID + @Description
END

次のように使用します。

declare @tempresult as table(v_value as varchar(15))

INSERT INTO @tempresult
    EXEC usp_GetValue @ID,  @Description

Select Top 1 @v_value = v_value From @tempresult

私のアドバイスは、関数アプローチを使用することです。

于 2013-07-20T13:52:02.707 に答える