2012-10-03 81 views
4

我有如下表:如何更改列名稱並通過存儲過程更改表中的值?

Desk_name | head 
ali  | john 
cars ln | max 
pol fr | max 
jus  | john 

我想,以創建一個存儲過程有回報:

Name  | sector_head 
ali mm | john 
cars ln | max 
pol fr | max 
jus mm | john 

正如你所看到的列名已改變(從「名稱」到'Desk_name'),如果它是單個單詞(ali和jus),則'Name'列中的每個名稱在每個值的末尾都有縮寫「mm」。

我可怎麼辦(我使用SQL Server)這樣的存儲過程?

感謝

+0

什麼是阿里 - >阿里毫米 –

+0

「阿里」是一個字不喜歡「汽車LN」。如果我有一個字我想在它前面加上「毫米」,讓「阿里」成爲「阿里毫米」 –

回答

4

你需要在其上提供ALIAS,例如

SELECT CASE WHEN LTRIM(RTRIM(Desk_name)) LIKE '% %' -- finds any space in string 
      THEN Desk_name 
      ELSE Desk_name + ' mm' 
     END AS Name, 
     head AS sector_head 
FROM tableName 

SQLFiddle Demo

+0

+1你的答案..我沒看到新臺幣你的答案時,我貼我的答案.. –

+2

@ JoeGJoseph是的,我經歷過也,當你還在打字的答案,有人提出這是你的答案是相同的答案是他,他平時則指責你抄襲這是不禮貌的答案。 :d –

4

試試這個:

在SQL Server

select case when charindex(' ',ltrim(rtrim(Desk_name)))=0 
      then Desk_name+' mm' 
      else Desk_name 
     end as Name , 
     head as sector_head 
from your_table 


SQL fiddle demo

+0

現在是好的,加上[這個小提琴代碼(http://sqlfiddle.com/#!3/ead5e/1)爲樣本,如果你想 – Yaroslav

+0

真好! '+ 1'使用'charindex' –

+0

@Yaroslav:非常感謝你..我將它在我的回答 –

0
SELECT CASE WHEN Desk_name = 'ali' OR Desk_name = 'jus' THEN Desk_name + ' mm' ELSE Desk_name END AS Name, 
head AS sector_head 
FROM DeskName 
+2

這不是動態的,如果它有什麼的'值你好world'? –

+0

@John Woo我同意 –

0

據我瞭解,你需要在更新表之前重新命名列Desk_name。要做到這一點,你可以試試這個:

sp_RENAME 'YourTableName.Desk_name' , 'Name', 'COLUMN' 

它應該重命名你的列。之後,您應該使用Joe或John的解決方案更新表中的記錄。

相關問題