2009-04-05 14 views

答えて

1

最もシンプルではないにしても、最善の解決策は、 'shim'ストアドプロシージャを使用して、これらのデフォルト値を持つ内部ストアドプロシージャを呼び出すオプションパラメータのデフォルト値を使用することです。 C#3以前ではオプションのパラメータを使用していました。

+0

が、私は同じことのために複数のストアプロシージャを持つことを避けようとしています。 –

-1

あなたはヌルとしてそれを渡し、その後、このような何か行うことができます。

create proc sp_find_person 
@fname varchar(30) 
@lname varchar(60) 
as 
begin 
select * from person a 
where (a.fname = @fname or @fname is null) 
    and (a.lname = @lname or @lname is null); 
end 
go 

人からすべての行を返しますNULLとして両方のパラメータを渡すを。

@fnameに値と@lname nullを渡すと、その@fnameを持つすべての人が返されます。

@lnameに値と@fname nullを渡すと、その@lnameを持つすべての人が返されます。

null以外の値を渡すと、指定されたfnameとlnameを持つすべての人が見つかります。

1

デフォルトにしたい値のNullを渡すだけで何か問題はありますか?
これはすべての状況で動作するとは限りません。
実際の値がNullであるかどうかを知りたい場合があります。そのため、デフォルトを使用しないでください。
この場合、追加の「デフォルト」パラメータを追加することになります。

[Microsoft.SqlServer.Server.SqlProcedure] 
public static void MySproc(SqlInt32 pID, SqlBoolean UseDefault_pID) 
{ 
    pID = (UseDefault_pID == SqlBoolean.True && pID == SqlInt32.Null) 
     ? SomeDefaultPIDValue : pID; 
} 

これは、あなたのCLRのSPROCを呼び出して、デフォルト値とオプションのパラメータに取るために、追加の「ラッパー」ストアドプロシージャを記述することで保存されます。

ヌルを渡したときにデフォルト-値を使用する:= 1
UseDefault_pIDヌルを渡したときに実際の価値を維持するために:はい、それは私が今のやっていることですUseDefault_pID = 0

+0

私は間違っていないと思います。これが3.5年前のことを見て、私は元のケースを覚えていません。私はそれがいくつかのオプションのパラメータを持つ手続きだったと推測できるので、デフォルトのチェックコードは長くなるかもしれません。 –

関連する問題