0

SQLServerで実行されたデータ型を取得したいと思います。あなたは私が何をしなければならないか考えましたか?

USE [MO]
GO

DECLARE @return_value int

EXEC    @return_value = [dbo].[SBC]
        @UserId = 1,

SELECT  'Return Value' = @return_value
GO

戻り値:

Name  ID
----------
Adam  1
Jhon  2

たとえばIDintまたはbigint?既存の手順しか実行できず、ここに問題があります。

4

1 に答える 1

0

その「戻り値」は、実行ステータスインジケータを意味し、整数です。データを返すことを意図したものではありません。標準値は、成功の場合は0、失敗の場合は1ですが、SP内の任意の整数を返して、さまざまなステータスを反映させることができます。

SQL Serverヘルプファイルから:

@ return_statusは、モジュールの戻りステータスを格納するオプションの整数変数です。この変数は、EXECUTEステートメントで使用する前に、バッチ、ストアドプロシージャ、または関数で宣言する必要があります。

スカラー値のユーザー定義関数を呼び出すために使用する場合、@return_status変数は任意のスカラーデータ型にすることができます。

さまざまなデータ型を返したい(そしてこれらの「型」を照会できるようにしたい)場合は、「出力パラメーター」を使用します。出力パラメーターは任意のデータ型にすることができ、SPが存在すると、sys.parametersシステムテーブルにクエリを実行して、SPのobject_idを渡して(またはobject_idとフィルタープロシージャ名でsys.proceduresに結合する)、sysに結合できます。 .parametersをsys.types(user_type_id上​​)に設定して、出力パラメーターを含む各パラメーターのsqlデータ型名を取得します

例えば

DECLARE @Param3 bigint
exec dbo.MySPName @Param1, @Param2, @Param3 output
SELECT @Param3 --gives you output value

--This will give you the names and data types of all output parameters in this SP
SELECT p.name, t.name as [type], p.max_length, is_output 
FROM sys.parameters p 
JOIN sys.types t ON p.user_type_id = t.user_type_id 
WHERE p.object_id = OBJECT_ID(N'MySPName') 
AND p.is_output = 1

スカラー値関数の場合、パラメーターとタイプのテーブルに対するこの同じクエリは、名前のないパラメーターを返します(p.nameは空の文字列/空白です)。これは、データ型を含むUDFの戻り値を表します。ただし、ストアドプロシージャは、「returnstatus」整数のみを持つことができます。

于 2013-02-14T15:06:17.383 に答える