2012-01-13 28 views
2

私は人テーブルの更新を処理するストアドプロシージャを持っています。私はすべての列を更新するとは限らないので、いくつかの手続きパラメータに対してデフォルト値(null)を提供しています。しかし、私がperson.middleinitialをnullに設定したいのであればどうしますか?手順は私の意図をどのように知っていますか?SQL Serverストアドプロシージャのnull可能な列を更新する方法

現実に私の人のテーブルにはたくさんのカラムがあり、多くはnullableであるため、これはソリューションによっては重荷になる可能性があります。

ALTER PROCEDURE [dbo].[uspPerson_update]  
@id uniqueidentifier,  
@fname nvarchar(20) = NULL,  
@minitial nvarchar(1) = NULL,  
@lname nvarchar(20) = NULL 
AS BEGIN  
SET NOCOUNT ON;  
UPDATE Person  
SET 
fname=ISNULL(@fname,fname),   
minitial=ISNULL(@minitial,minitial),   
lname=ISNULL(@lname, lname) 
WHERE [email protected] 
END 
+0

フラグを追加できます。 '@SetMI as Bit = 0'は、値を適用する意図を示します。 'UPDATE'ステートメントは、 'CASE'を使用して古い値をリサイクルするか、新しい値を適用するかを決定します。 – HABO

答えて

4

はゼロ長さ/空の文字列''にそれらを設定し、NULLにイニシャルを設定しないでください。

次に、「指定しない」(NULL)と「初期なし」('')の違いを確認できます。

+0

数字や日付、その他の文字以外の列についてはどうすればよいですか? – akaDka

+0

@akaDka:*特別な値(日付の場合は1900-01-01、整数の場合は-1など)を選択するか、フィールドをクリアする専用のコードが必要です。あなたのビジネスロジック、ユースケースなどに依存します。非常にハッキーなオプションは、すべてを文字列として渡すことです。空の文字列メソッドを使用できるようになりますが、それは厄介です。 – MatBailie

+0

はい、特にバイナリのために非常に厄介です;)インテントを決定するためにビット単位の(&)を使用できる整数パラメータを使用しています。 – akaDka

関連する問題