2013-02-27 35 views
0

我有以下的字符串,但它似乎不喜欢它:ASP经典 - 微软SQL和多个地方上的UPDATE子句

"UPDATE 
    table 
     SET a = '', b = '34' 
    WHERE id = '1000001'; 
     SET a = '1111', b = '11' 
    WHERE id = '100210'; 
     SET a = '', b = '2' 
    WHERE id = '8002059';" 

在我的ASP经典代码串是在一行..这是正确的方式做多个更新/ where语句?

回答

0

它会更喜欢这个(3个语句)。

UPDATE table SET a = '', b = '34' WHERE id = '1000001'; 

UPDATE table SET a = '1111', b = '11' WHERE id = '100210'; 

UPDATE table SET a = '', b = '2' WHERE id = '8002059'; 

或者,您可以在SET中使用两个CASE语句。如果这是一次性的情况,那么您经常需要精确执行3次条件更新(不太可能),它将不会像可读性那样快速运行,而是具有1次数据库往返运行而不是3次运行。

UPDATE table SET 

a = CASE id WHEN '1000001' THEN '' WHEN '100210' THEN '1111' WHEN '8002059' THEN '' ELSE a END, 

b = CASE id WHEN '1000001' THEN '34' WHEN '100210' THEN '11' WHEN '8002059' THEN '2' ELSE b END 

WHERE id IN ('1000001', '100210', '8002059'); 
+0

让你在我的字符串的意思,也投入了太多的更新表的一部分? – Jimmyt1988 2013-02-27 12:44:38

+0

你应该将'table'换成'[table]' – 2013-02-27 12:47:29

+0

aghh在asp经典for循环中产生这个字符串很糟糕。谢谢你的帮助。 – Jimmyt1988 2013-02-27 12:53:04

0

不,它会给你一个错误。

Msg 156, Level 15, State 1, Line 2 
Incorrect syntax near the keyword 'table'. 

而且你不能在UPDATE声明中使用多个地方。

试试这个:

UPDATE 
    [table] 
    set a = 
    (case when id IN ('1000001', '8002059') then '' 
      when id = '100210' then '1111' 
    end  
    ), 
    b = 
    (case when id = '1000001' then '34' 
      when id = '100210' then '11' 
      when id = '8002059' then '2' 
    end  
    ) 
    where id in ('1000001', '100210', '8002059'); 
+0

天哪,谢谢你... – Jimmyt1988 2013-02-27 12:47:54