5

これが取引です。私たちのデータベースでは、セキュリティとモジュール性のために、ほとんどの読み取り (つまり、select ステートメント) をテーブル値関数でラップしています。したがって、1 つ以上のオプションのパラメーターを定義する TVF があります。

デフォルトのパラメーターを持つ TVF を使用すると、default次のように TVF を呼び出すときにキーワードの使用が義務付けられると思います。

select * from fn_SampleTVF(123, DEFAULT, DEFAULT)

それは問題ありません。すべてがクエリ アナライザーで機能しますが、実際に ADO.NET からこの要求を行うときが来たら、実際に単語defaultをレンダリングされた SQL に入れる SQL パラメーターを作成する方法がわかりません。

私は今、おおよそ次のようなものを持っています:

String qry = "select * from fn_SampleTVF(@requiredParam, @optionalParam)";

DbCommand command = this.CreateStoreCommand(qry, CommandType.Text);

SqlParameter someRequiredParam = new SqlParameter("@requiredParam", SqlDbType.Int);
someRequiredParam.Value = 123;
command.Parameters.Add(someRequiredParam);

SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
optionalParam.Value = >>>> WTF? <<<<
command.Parameters.Add(optionalParam);

defaultでは、 TVF に移行する方法を知っている人はいますか?

4

3 に答える 3

3
SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
optionalParam.Value = >>>> WTF? <<<<
command.Parameters.Add(optionalParam);

デフォルトでは、上記のコード(オプションのパラメーター)を追加する必要はありません。SQL Serverは、UDFで定義されているデフォルトを使用します。ただし、別の値を渡したい場合は、次を渡すことができます。

SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int); 
optionalParam.Value = newValue; 
command.Parameters.Add(optionalParam); 
于 2010-11-01T08:41:54.683 に答える
1

私はそうしたでしょう:

public void YourMethod(int rparam, int? oparam = null)
{
    String qry = string.Format("select * from fn_SampleTVF(@requiredParam, {0})"
        , !oparam.HasValue ? "default" : "@optionalParam");

    SqlParameter someRequiredParam = new SqlParameter("@requiredParam", SqlDbType.Int);
    someRequiredParam.Value = rparam;
    command.Parameters.Add(someRequiredParam);

    if (oparam.HasValue)
    {
        SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
        optionalParam.Value = oparam.Value;
        command.Parameters.Add(optionalParam);
    }
}
于 2012-12-06T06:39:41.900 に答える
0

パラメータ値として Null を渡すことができます。

この記事で例を示します: http://support.microsoft.com/kb/321902

于 2009-12-02T21:39:07.117 に答える