如何通过存储过程更改列名并更改表中的值?
Posted
技术标签:
【中文标题】如何通过存储过程更改列名并更改表中的值?【英文标题】:how to change column name and change a value in a table via a stored procedure? 【发布时间】:2012-10-03 07:35:19 【问题描述】:我有下表:
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
如您所见,列名称已更改(从“名称”更改为“桌面名称”),并且“名称”列中的每个名称如果是单个单词,则在每个值的末尾都有缩写“mm”( ali 和 jus)。
这样的存储过程怎么做(我用的是sql server)?
谢谢
【问题讨论】:
'ali' 是一个单词,不像'cars ln'。如果我有一个单词,我想在它前面添加'mm',所以'ali'变成'ali mm' 【参考方案1】:你需要提供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
【讨论】:
@JoeGJoseph 是的,我也经历过,当您仍在输入答案并且有人提交的答案与他的答案相同时,他通常会指责您复制了粗鲁的答案. :D【参考方案2】:试试这个:
在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
【讨论】:
现在可以了,如果需要,请添加this fiddle code作为示例 不错!+1
使用 charindex
@Yaroslav:非常感谢......我已经在我的回答中添加了它【参考方案3】:
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
【讨论】:
这不是动态的,如果它的值为hello world
呢?【参考方案4】:
据我了解,您需要在更新表之前重命名列 Desk_name。要做到这一点,你可以试试这个:
sp_RENAME 'YourTableName.Desk_name' , 'Name', 'COLUMN'
它应该重命名您的列。之后,您应该使用 Joe 或 John 的解决方案来更新表中的记录。
【讨论】:
以上是关于如何通过存储过程更改列名并更改表中的值?的主要内容,如果未能解决你的问题,请参考以下文章
访问数据库表中的值,并把它们作为一个参数,在MySQL存储过程