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

您可以使用 case 语句:

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,您可以使用 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 回答