0

Oracleと同様、SQL Serverはストアドプロシージャのパラメータの既定値をサポートしています。 Oracle構文:SYSまたはINFORMATION_SCHEMAテーブルを使用してSQL Serverプロシージャのデフォルトパラメータを調べる

CREATE OR REPLACE PROCEDURE p_default (
    p_in_number IN number := 0, 
    p_out_number OUT number, 
    p_in_varchar IN varchar2 := '0', 
    p_out_varchar OUT varchar2, 
    p_in_date  IN date  := date '1981-07-10', 
    p_out_date OUT date 
) 

SQL Serverの構文:私はsysから選択SQL Serverでこれを発見することができますどのように

SELECT argument_name, defaulted FROM all_arguments WHERE object_id = :proc_id 

CREATE PROCEDURE p_default (
    @p_in_number  INTEGER = 0, 
    @p_out_number  INTEGER OUT, 
    @p_in_varchar  VARCHAR(10) = '0', 
    @p_out_varchar  VARCHAR(10) OUT, 
    @p_in_date   DATE = '1981-07-10', 
    @p_out_date  DATE OUT 
) 

オラクルでは、私はこのクエリを使用してデフォルトを発見することができますまたはINFORMATION_SCHEMAテーブル? (!):

Discover DB2 procedure default parameters using SYSCAT tables

答えて

4

には、単純なありません、私はINFORMATION_SCHEMA.PARAMETERSに任意の有用な列が表示されていない、とsys.parameters.has_default_valueが正しく設定されていないようです

注、私はDB2について同様の質問として尋ねてきましたそれを行う方法。 documentation for has_default_valueでは、

となります。SQL Serverでは、このカタログビューのCLRオブジェクトの既定値のみが保持されます。したがって、Transact-SQLオブジェクトの場合、この列の値は0になります。 Transact-SQLオブジェクトのパラメーターの既定値を表示するには、sys.sql_modulesカタログビューのdefinition列を照会するか、OBJECT_DEFINITIONシステム関数を使用します。

したがって、格納されているproc定義全体を取り出して、それを解析して値を決定する必要があります。


サイドノート:私は@p_in_date DATE = '1981-07-10'を気にします。 dateのデータ型はdatetimeよりも少し賢明ですが、上記のようにあいまいであるかどうかはわかりません。確かにdatetimeに変換された場合、言語設定によっては7月10日または10月7日になる可能性があります。私は'19810710'でより快適になります。これは常に7月10日と解釈されます。

+0

ありがとうございました。私はまた質問をした直後にこの情報を見つけました...あまりにも悪い –

+0

その 'date'のデフォルト値については、単なる例です...しかし、ヒントありがとう! –

関連する問題