在更新语句中使用replace

时间:2015-01-28 13:07:30

标签: sql sql-server database sql-update

我有什么我猜我有一个愚蠢的问题,但我似乎无法让我的更新声明工作。 我有以下查询。

SELECT REPLACE(CAST(Text_col AS NVARCHAR(250)),'Vegetable oils','Refined Vegetable oils')AS 'DESCRIPTION', Text_col as 'ORIGINAL'
FROM Table1 
where  doc_id in (SELECT DOC_ID
FROM Table1
where Text_col like '%Vegetable oils%')
and FUNCTION_CODE = 'INGREDIENT'

这返回一个包含两列的表。它有200多行。 DESCRIPTION列的TEXT字段包含更新的文本,ORIGINAL具有原始文本,因此我可以并排查看所有更改。我很高兴看起来如此,所以我尝试了以下Query来更新故事以实现更改。

begin transaction
UPDATE Table1 
Set Text_col = REPLACE(CAST(Text_col AS NVARCHAR(MAX)),'Vegetable oils','Refined Vegetable oils')
WHERE  doc_id in(SELECT DOC_ID
FROM Table1
WHERE Text_col like '%Vegetable oils%')
and function_code = 'INGREDIENT DEC

Query运行时没有错误但更新了0行。对于我的生活,我无法发现为什么它不会更新上述SELECT语句中出现的200多行。

我在SQL 2012 Management studio上运行它,如果这很重要的话。

由于

1 个答案:

答案 0 :(得分:2)

非常确定您的整个更新可以简化为此。

UPDATE Table1 
Set Text_col = REPLACE(CAST(Text_col AS NVARCHAR(MAX)),'Vegetable oils','Refined Vegetable oils')
where FUNCTION_CODE = 'INGREDIENT'

确实没有必要限制更新,因为无论如何它都必须扫描表格,并且拉取doc_id的子选择只是增加额外的工作。