如何用sql中不同表中的值替换字符串中的文本

时间:2016-12-29 18:11:34

标签: sql sql-server sql-server-2012

所以说我有一个名为Description的表,其中一列存储了列出学生描述的字符串......

St_Desc
Student: Adam / Age: 19 / Major: English
Student: Ben / Age: 22 / Major: Biology

我还有一个名为Info的表,用于存储学生信息

St_Id | St_Name
1000  | Adam
1001  | Ben

因此,对于带有St_Desc列的表,我想用其各自的Id号替换所有名称。所以我要找的结果就是这个..

St_Desc
Student: 1000 / Age: 19 / Major: English
Student: 1001 / Age: 22 / Major: Biology

到目前为止,我尝试将St_Name和St_Id存储在单独的变量中,然后执行UPDATE [dbo].[Description] SET [St_Desc] = REPLACE([St_Desc], @name, @id)。但这并没有改变任何事情。我不知道如何让REPLACE函数遍历所有名称并用其ID替换它们。我不太熟悉sql脚本,所以请随时详细说明。谢谢。

1 个答案:

答案 0 :(得分:3)

我认为一个简单的Replace()可以与JOIN协同工作。

Declare @Table1 table (ST_Desc varchar(max))
Insert Into @table1 values
('Student: Adam / Age: 19 / Major: English'),
('Student: Ben / Age: 22 / Major: Biology')

Declare @Table2 table (St_Id int,St_Name varchar(50))
Insert Into @Table2 values
(1000,'Adam'),
(1001,'Ben')

Select St_Desc  = Replace(St_Desc,St_Name,St_ID)
--Update @Table1 Set St_Desc = Replace(St_Desc,St_Name,St_ID)
 From  @Table1 A
 Join  @Table2 B on CharIndex(': '+St_Name+' /',St_Desc)>0
  

如果您对结果感到满意,请取消注释更新并删除   选择

返回

St_Desc
Student: 1000 / Age: 19 / Major: English
Student: 1001 / Age: 22 / Major: Biology