我想查找具有值的所有数据行,例如'N / A'
我想将所有具有相同CommonID的数据行更新到NewDataHere列中,因此在下面的示例中,ID 1和2会受到影响
我在存储过程中执行此操作
代码远:
DECLARE @sqlPRatingChange NVARCHAR(MAX)
SET @sqlPRatingChange = 'UPDATE TblAsbestos SET NewDataHere= ''NA''
WHERE (SELECT ID FROM TBLASBESTOS WHERE VALUE= ''N/A'')'''
EXEC (@sqlPRatingChange)
数据库示例,因为它应该照看代码
ID-VALUE-NewDataHere
1-N / A-N / A
2-C-N / A
2-N / A-N / A
1-A-N / A
3-B - ''
答案 0 :(得分:2)
为什么使用动态SQL?您的查询似乎足够接近。它只需要一个相关条款:
UPDATE TblAsbestos
SET NewDataHere = 'NA'
WHERE (SELECT ID FROM TBLASBESTOS a2 WHERE VALUE = 'N/A' AND TblAsbestos.id = a2.id);
在SQL Server中,我可能倾向于使用CTE和窗口函数来执行此操作:
with toupdate as (
select a.*,
sum(case when value = 'N/A' then 1 else 0 end) over (partition by id) as numNAs
from TblAsbestos a
)
update toupdate
set NewDataHere = 'NA'
where numNAs > 0;
答案 1 :(得分:2)
这可能是对戈登答案的评论,但它太长了,答案提供的格式有帮助......
错误的语法错误是因为在SQL Server中您不能为更新语句的目标设置别名(不要混淆使用别名作为允许的目标)。 where子句也是不正确的,它似乎是EXISTS
子句和IN
子句之间的混合,但最终都没有。我想你需要:
UPDATE TblAsbestos
SET NewDataHere = 'NA'
WHERE EXISTS
( SELECT 1
FROM TblAsbestos AS a
WHERE a.Value = 'N/A'
AND a.id = TblAsbestos.id
);
或者
UPDATE TblAsbestos
SET NewDataHere = 'NA'
WHERE ID IN (SELECT a.ID FROM TblAsbestos AS a WHERE a.Value = 'N/A');
答案 2 :(得分:1)
试试这个。只需将table1替换为您的表名:
update a
set NewDataHere = 'N/A'
from table1 as a
where exists(select 1 from table1 as b where a.id = b.id and b.value = 'N/A')
答案 3 :(得分:0)
试试这个:
更新TblAsbestos a SET NewDataHere ='NA' 存在的地方(选择前1个ID 来自TBLASBESTOS a2 WHERE上(值)='N / A' AND a.id = a2.id);