这两个SQL语句可以合而为一吗?使用两个约束更改多个索引

时间:2012-11-19 23:10:23

标签: sql database

我有一个表单,用户可以使用该表单编辑数据库中的数据。数据库的结构如下:

table

如果用户想要同时编辑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'"

3 个答案:

答案 0 :(得分: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注入!您确实应该使用prepared statements,您将变量作为未针对SQL进行评估的参数传递到其中。如果您不知道我在说什么,或者如何解决它,请阅读Bobby Tables的故事。

答案 1 :(得分: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

答案 2 :(得分: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服务器,如果不相同,解决方案应该是相似的。