2016-08-02 7 views
0

データベースのSQL行を編集するためにC#で編集メニューをビルドしていますが、ユーザーが空白のままにしておくと更新する特定の行の列を選択できるようにしたいその列を更新しません。選択した列のSQLのみを更新する

ユーザは3つのボックスを見ると、1つのボックスに何かを入力することができます。これは、行の1つの列の更新だけを反映します。私は9つの異なる結果を取得し、編集行と同じように、それは指数関数的にスケールにロジックが完了したときにのみ、3のテキストボックスのためにこのタイプのロジックを見ることができるように正しいSQLが 、選択されます。この

string RowUpdate =""; 
if(Title !="" && Author =="" && Pages==""){ 
RowUpdate = "Update BookTable set [email protected] where [email protected]"; 
} 
else if (Title =="" && Author !="" && Pages ==""){ 
RowUpdate = "Update BookTable set [email protected] where [email protected]"; 
} 

のようなものを実装し始め成長する。

値が入力されていない場合に特定の列のみを更新する方法があるのか​​どうかわかりませんので、特定の列のみを更新する巨大なロジックを書く必要はありませんか?

RowUpdate = "Update BookTable set (IF null Skip [email protected]),(If null Skip [email protected]), (If null Skip [email protected]) where [email protected] 

またはこの簡単かつ迅速に行うため、他の方法と同様

何か? お返事ありがとうございます

答えて

0

これは最適な解決策ではありませんが、実行する必要があることを願っています。利用可能な価値に基づいてクエリを作成します。

string rowUpdate = "UPDATE BookTable SET "; 
if(Table != "") 
rowUpdate += "[email protected] "; 
if(Author != "") 
rowUpdate += "[email protected] "; 
. 
. 
rowUpdate += "WHERE [email protected] "; 
+0

を削除するにはこれが私の解決策に似ていますが、私はまだそれはあまり書き込みだように、これが見えるすべてのロジックを実装する必要がある一方で、あなたに感謝 –

0

プロパティを更新することを選択していない場合は、プロパティを古い値にデフォルト設定できますか?これにより、すべてのプロパティーに対して完全な行の更新を行うことができ、編集されていないプロパティーを以前と同じ値に設定しながら、更新されたプロパティーを真に変更するだけです。

0

したがって、SQLでCOALESCENULLIFを組み合わせて使用​​すると、1つのUPDATE文を記述できます。

まずは、と遊ぶために一時テーブルを作成してみましょう:

CREATE TABLE #mybooktable 
(
    BookID int not null IDENTITY(1,1), 
    Title nvarchar(50), 
    Author nvarchar(100), 
    Pages int 
) 
GO 
INSERT #mybooktable (Title, Author, Pages) VALUES ('ABC','Mary B.',10) 
INSERT #mybooktable (Title, Author, Pages) VALUES ('DEF','John D.',20) 
GO 

SELECT * FROM #mybooktable 
GO 

ここでクエリがあります。 COALESCEは、最初のNULL以外の値を選択します。 NULLIFは、空の文字列を強制的にnullを返します。

-- variables 
DECLARE @bookId int, @title nvarchar(50), @author nvarchar(100), @pages int 

-- Some test parameters. Going to only change the title here 
SELECT @bookId = 1, @title = 'ABC' 

UPDATE #mybooktable SET 
    Title = COALESCE(NULLIF(@title,''), Title), 
    Author = COALESCE(NULLIF(@author,''), Author), 
    Pages = COALESCE(CASE WHEN @pages <= 0 THEN NULL ELSE @pages END, Pages) 
WHERE BookID = @bookId 

-- check 
SELECT * FROM #mybooktable 

このブロックを実行し、テストパラメータを混乱させる。あなたが定義したパラメータだけが変更されます。

  • 私はあなたがすでにintにキャストしていると仮定しているので、私はCASE文をPagesに貼り付けました。
  • あなたが(TRIMする必要があります
  • )あなたの文字列スペース
関連する問題