0

ユーザーがデータベース内のデータを編集するために使用できるフォームがあります。データベースは次のように構成されています。

テーブル

ユーザーが FAVE_COLOR と FAVE_FOOD の両方を編集したい場合、SQL ステートメントでそれを行うにはどうすればよいでしょうか? これは思いつきますが、これを一文で行う方法はありますか?

string sql1 = "UPDATE MYTABLE " +
              "SET PROP_VALUE = '" + form["color"] + "' " +
              "WHERE ID = " + form["id"] + " " +
              "AND PROP_NAME = 'FAVE_COLOR'"

string sql2 = "UPDATE MYTABLE " +
              "SET PROP_VALUE = '" + form["food"] + "' " +
              "WHERE ID = " + form["id"] + " " +
              "AND PROP_NAME = 'FAVE_FOOD'"
4

3 に答える 3

2
string sql = "UPDATE MYTABLE " +
             "SET PROP_VALUE = CASE " +
             "WHEN PROP_NAME = 'FAVE_COLOR' THEN '" + form["color"] + "' " +
             "WHEN PROP_NAME = 'FAVE_FOOD'  THEN '" + form["food"]  + "' " +
             "END " +
             "WHERE ID = " + form["id"] + " " +
             "AND PROP_NAME IN ('FAVE_COLOR', 'FAVE_FOOD')"

ただし、SQL インジェクションには注意してください。SQL で評価されないパラメーターとして変数を渡す、準備済みステートメント実際に使用する必要があります。私が何を話しているのか、またはそれを修正する方法がわからない場合は、Bobby Tablesの話を読んでください。

于 2012-11-19T23:21:14.527 に答える
1

ユースステートメントを使用できます。

UPDATE MYTABLE
SET PROP_VALUE = (
 CASE favefood
   WHEN PROP_NAME = 'FAVE_FOOD'
   THEN 'PIZZA'
 CASE favecolor
   WHEN PROP_NAME = 'FAVE_COLOR'
   THEN 'BLUE'
WHERE ID = @myIdValue
于 2012-11-19T23:21:45.113 に答える
0

MS SQL Server の場合、次のように 2 つのプロパティを同時に更新する UPDATE FROM を使用できます。

CREATE TABLE MYTABLE (
  ID INT,
  PROP_NAME VARCHAR(20),
  PROP_VALUE VARCHAR(20));
go

INSERT INTO MYTABLE VALUES (1, 'A','B')
go

INSERT INTO MYTABLE  VALUES (1, 'C', 'D')
go

UPDATE MYTABLE
SET PROP_VALUE = X.PROP_VALUE
FROM MYTABLE MT JOIN (
  SELECT 'A' AS PROP_NAME, 'F' AS PROP_VALUE
  UNION
  SELECT 'C' AS PROP_NAME, 'G' AS PROP_VALUE) AS X ON MT.PROP_NAME = X.PROP_NAME
WHERE ID = 1

他の SQL DB サーバーの場合、ソリューションは同一ではないにしても類似しているはずです。

于 2012-11-19T23:21:40.917 に答える