2012-11-19 33 views
0

我有一個表單,用戶可以使用它來編輯數據庫中的數據。該數據庫的結構是這樣的:這兩個SQL語句可以合併成一個嗎?使用兩個約束來更改多個索引

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'" 
+0

什麼SQL數據庫服務器您使用的? – ShyJ

回答

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的故事。

0

對於MS SQL Server,您可以使用UPDATE從中將同時更新兩個屬性,就像這樣:

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數據庫服務器的解決方案應該是相似,如果不相同。

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 
+0

如果我想更新FAVE_FOOD和FAVE_COLOR,我認爲不行。 – Kalina

相關問題