2012-10-03 45 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的解决方案更新表中的记录。