2012-09-06 108 views
2

我试图运行下面的语句,但预期它不工作。Sql Server的替换功能

这意味着取出子查询值并将其从注释字段中删除(替换为空字符串)。

我检查了子查询返回了我期望的正确值,但替换函数没有像我期望的那样工作。有没有人有任何想法?

预先感谢您。

update contacts set comment = 
replace(comment, 
    (select 'Specialty: ' + a.categoryname 
    from contacts c 
    join categories a 
    on c.categorycode = a.categorycode 
    where contacts.contactid = c.contactid) 
, '') 
+0

是否有可能有在'Categories.CategoryCode'重复值? – Keith

+0

你收到了什么错误?您确定可以同时获取记录集和“更新”吗? – Kermit

回答

3

本应该做的我猜

update contacts 
set comment = replace(comment,'Speciality :' + categories.categoryname,'') 
from contacts inner join categories 
on  contacts.categorycode=categories.categorycode 
and contacts.contactid=categories.contactid 

in sqlfiddle

+0

为什么在范围表中两次触点表? (上左侧大小一次'=',一旦在右边,在** **不相关子查询) – wildplasser

+0

是更新如何加入工作:)我没有在这里使用别名联系人表 – Sankara

+0

感谢您的建议。它不需要最后一行,但我评论说,它仍然没有像我期望的那样工作。非常令人费解。 – Andrew

0

这是替换功能:

REPLACE (string_expression , string_pattern , string_replacement) 

你确定string_pattern匹配的string_expression的东西吗?

这里是一个link相同的信息

+0

你好,是的,我已经检查子查询返回了我期望的那样。 – Andrew

+0

你能展示一个正在更新的评论的示例(数据)和从子查询返回吗? –