我有什么我猜我有一个愚蠢的问题,但我似乎无法让我的更新声明工作。 我有以下查询。
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上运行它,如果这很重要的话。
由于
答案 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的子选择只是增加额外的工作。