2017-07-12 17 views
0

私はパラメータを指定するわけではない場合、私は、.NETからこのSPを呼び出すとしています。この更新行フィールド

alter procedure sp_test 
@p1 varchar(10)='', 
@p2 int=0, 
@p3 nvarchar(10)=N'' 
as 
begin 
    update mytable set [email protected],[email protected],[email protected] where mycondition 
end 

のようなストアドプロシージャがp2を言ってきましたこれは明らかにp2セルを空の文字列に置き換えます。それではどうすればそれを避けることができますか?フィールドに値が指定されていない場合は、その列の既存の値を使用します。そう?そのテーブルの列の数は非常に巨大であり、別の状況に対して別々の更新クエリを持つのは良い方法ではないと思いました。

+0

使用しているdbmsにタグを付けます。そのコードは製品固有です。 – jarlh

答えて

-1

申し訳ありませんがアイブ氏は、私はそうCOALESCEはトリックを行なったし、解決この

alter procedure sp_test 
@p1 varchar(10)=NULL, 
@p2 int=NULL, 
@p3 nvarchar(10)=NULL 
as 
begin 
    update mytable set p1=COALESCE(@p1,p1),p2=COALESCE(@p2,p2),p3=COALESCE(@p3,p3) where mycondition 
end 

のようにSPを変更し、同じ

を必要とする人とそれを共有し、自分の質問のための答えを得ました私は思う。だから私のテストでは値がない場合

1

CASE ... WHEN ... eを使用できます。 g。

alter procedure sp_test 
@p1 varchar(10)='', 
@p2 int=0, 
@p3 nvarchar(10)=N'' 
as 
begin 
    update mytable 
set 
p1=CASE WHEN @p1 IS NULL THEN p1 ELSE @p1 END, 
p2= CASE WHEN @p2 IS NULL THEN p2 ELSE @p2 END, 
p3= CASE WHEN @p3 IS NULL THEN p3 ELSE @p3 END 
where mycondition 
    end 

また、あなたは、SQL ServerでCOALESCEまたはISNULLを使用することができます。

2
ALTER PROCEDURE sp_test 
(
    @p1 varchar(10) = NULL, 
    @p2 int = NULL, 
    @p3 nvarchar(10) = NULL 
) 
AS 
BEGIN 
    UPDATE mytable 
    SET set p1= ISNULL(@p1, p1), 
    p2 = ISNULL(@p2, p2), 
    p3 = ISNULL(@p3, p3) 
    WHERE mycondition 
END 
関連する問題