2

userdataこれらの列を持つテーブルがあります:

userId
userName
userEmail
userContact
userDob
userAdd
userImage
userPass

ストアド プロシージャを使用して、このテーブルからデータを選択しています。

ここで、ストアド プロシージャを使用してこのテーブルを更新します。このテーブルをストアド プロシージャで更新することはできますが、私の要件は、profile.aspxユーザーがすべての列をストアド プロシージャで更新できるようにすることです。しかし、他のフォームでは、ユーザーがいくつかの列のみを更新できるようにする必要があります。たとえば、setting.aspxページでは、ユーザーが列のみを更新できるようにしuserPassます。

そのため、別のストアド プロシージャを作成する必要があります。そして、私はこのようなテーブルをたくさん持っています。そして、さまざまな列を持つ多くのテーブルを更新するには、いくつのストアド プロシージャを作成する必要があるのだろうかと考えました。

テーブルごとに1つのストアドプロシージャのみでこれを実行して、テーブル全体または個々の列を更新するか、これを短縮するc#コードを使用できるように、誰かが短い方法を提案できますか?

前もって感謝します

4

5 に答える 5

4

ISNULLMSDNの以下のステートメントで説明されているMS SQL Serverで関数を使用できます。

NULL を指定された置換値に置き換えます。

さまざまな操作で更新するすべてのフィールドを更新する 1 つのストアド プロシージャを作成できます。すべてのページから同じプロシージャを呼び出します。次に、ページからそのページに関連するパラメーターのみを渡し、残りのパラメーター (そのページに関連しない) には pass を渡しnullます。

ストアドプロシージャは次のようになります

UPDATE dbo.userTable SET
userName = ISNull(@userName, userName),
userEmail= ISNull(@userEmail, userEmail),
-- list of all your table fields goes here
WHERE userID = @userID

これが行うことは、パラメーターを渡す場合です。そのフィールドの値を更新します。任意のフィールドを渡すnullと、そのフィールドが既存の値で更新されます。そのため、そのフィールドは更新操作で影響を受けません。

于 2013-04-01T07:20:52.420 に答える
0

更新する必要があるすべてのデータを Datatable に取得します。datatable.WriteXML メソッドを使用し、Streamオブジェクトですべての文字列を取得します。XmlWriteMode.IgnoreSchema を使用してデータのみを取得します。

        DataTable dt = new DataTable();
        dt.WriteXml(stream object ,XmlWriteMode.IgnoreSchema)

ここで、Varchar(max) パラメータを受け取り、Streamオブジェクトをプロシージャに渡すプロシージャを作成します。

その後、Openxml を使用するか、Sqlserver の XML 変数でこのすべてを取得して、@tablevariable または #temp テーブルですべてのデータを取得できます。

Openxml の sqlserver または For Xml for XMl 変数

次に、1つのテーブルのすべてのものを取得し、そのテーブルを使用して、主キーIDに基づいてデータベーステーブルを更新します....

SQL qquery は以下のようなものです

Update "Database Table Name"
set .........
from "GetDatafromc#table"
于 2013-04-01T07:48:49.653 に答える
0

複数の条件を持つ単一のストアド プロシージャを使用してif.. else..、各フィールドの更新を制御できます。次に、それらをパラメーターとして渡して、更新するフィールドを制御できます。

于 2013-04-01T07:10:17.560 に答える
0

次のようにできると思います: フロント ページで、更新したくないフィールドを編集不可に設定する必要がありますが、値をパラメータとしてストア プロシージャに渡します。ストア プロシージャでは、これらのフィールドの古い値を対応するパラメーターに変更します。等しくない場合は更新し、そうでない場合はこれらのフィールドで何もしません。

于 2013-04-01T07:18:48.230 に答える
0

次のようなものを使用できます。

UPDATE tbl t
   SET t.userName =  CASE WHEN @userName  IS NULL THEN t.userName  ELSE @userName  END
     , t.userEmail = CASE WHEN @userEmail IS NULL THEN t.userEmail ELSE @userEmail END
     ,  ...
   WHERE t.userName = CASE WHEN @WHERE_userName IS NULL THEN t.userName ELSE @WHERE_userName END
     AND ...

したがって、特定のフィールドを更新したくない場合は、コードから DBNull.Value をそのパラメータのプロシージャ コールに渡すだけです。これは、フィールドを NULL 値で更新するつもりがない場合にのみ機能することに注意してください。null が必要な場合は、null で動作するようにコードを少し書き直すことができます。さらにヘルプが必要な場合は、コメントを入力してください。

于 2013-04-01T07:24:22.133 に答える