2016-11-30 2 views
0

汚れたデータがあるため、文字列を変更した後に兄弟の列に等しい列をテーブルに設定する必要があるという問題があります。テーブルの列を兄弟の列に設定する

IE:(これらのセットのコマンドを順番に実行されないため)

UPDATE 
    table 
SET 
    column1 = column2 
    ,column2 = column3 
    ,column4 = column5 
    ,column5 = SUBSTRING(column6,1,1) 
    ,column6 = RIGHT(column6, LEN(column6) - 1) 

しかし、これが仕事に行くのではありません。個々にサブクエリを個別に書き出すよりも、これについてもっと良い方法がありますか?

+0

希望の注文に基づいて1つの列の更新を実行してみませんか? –

+0

@vkp Yaそれは私がやろうとしていたものですが、1つのアップデートでそれをすべて実行するクールな方法があるかどうかを見たいと思っていました。興味深いもの: – 40Alpha

答えて

2

更新可能CTE

はクールな方法があったかどうかを確認したかったwihtあなたはそれを試してみてください - オム - 十分なクール?

WITH UpdateableCTE AS 
(
    SELECT column1 
      ,column2 AS NewCol1 
      ,column2 
      ,column3 AS NewCol2 
      ,column4 
      ,column5 AS NewCol4 
      ,column5 
      ,SUBSTRING(column6,1,1) AS NewCol5 
      ,column6 
      ,RIGHT(column6, LEN(column6) - 1) AS NewCol6 
    FROM YourTbl 
) 
UPDATE UpdateableCTE SET column1=NewCol1 
         ,column2=NewCol2 
         ,column4=NewCol4 
         ,column5=NewCol5 
         ,column6=NewCol6; 
0

Microsoft SQL Serverを使用している限り動作します。 1つずつ実行されるのではなく、全体として割り当てられます。

UPDATE someTable SET a = b, b = a 

これはmysqlでも機能しません。

+0

私はペア以上に交換することはできますか?私はそれに戻るときに私は複数回試してみる必要があります。ありがとう – 40Alpha

+0

@ 40Alphaはい。ここを見てくださいhttp://dba.fyicenter.com/faq/sql_server/Importance_of_Column_Order_in_SET_Clause.html私はmysqlのような仕様でそれを見たいですhttp://dev.mysql.com/doc/refman/5.5/en /update.html、残念ながら私はsql-server(まだ)のためにそれを見つけませんでした。 –

関連する問題