提前感谢大家,我一直在尝试使用下面帖子中的查询,仅在值不为空的情况下使用同一列更新name_field列中的空值
基于非Null的相同字段更新字段
我的表有ParcelID_Field, Name_Field和Address_Field有时Namefield是空白的。地址和ID字段总是被填充。每当Name字段为NULL时,我希望使用存在的信息填充NULL字段
这个查询几乎可以工作,但是它说运行时没有行受到影响。()中的select工作得很好,只是没有更新任何值。
update [DMSEngine].[dbo].[IndexForm_ePermitsResults]
set Name_Field = (select b2.Name_Field
from [DMSEngine].[dbo].[IndexForm_ePermitsResults] b2
where b2.Name_Field is not null and
b2.ParcelID_Field = ParcelID_Field and
ParcelID_Field = 12257
)
where ParcelID_Field = 12257 and Name_Field is null;
ParcelID_Field | Name_Field | AddressField | 111 | 史密斯1街道名称 |
---|---|---|
111 | 1街道名称 | |
111 | 1街道名称 | |
111 | 史密斯1街道名称 | |
222 | 3街道名称 | |
222 | 雅各布斯 | 3街道名称 |
222 | 3街道名称 | |
222 | 3街道名称 |
在编辑表中的数据时,先单独尝试Select查询,这样您就可以知道它是否返回正确的数据。
关于这个查询:为什么有ParcelID_Field = 12257"?这个"where"条件将只给您一个字段,其中Name_Field为null且ParcelID_Field为12257。
我明白了。由于上述质疑者的暗示,这次选择被取消了。所以我改变了select语句,但还是抛出了一个错误。子查询返回的值大于1。这是不允许的……所以我仔细研究了这个错误,并在我的查询中包含了MAX,它起作用了。
正确答案是
update [DMSEngine].[dbo].[IndexForm_ePermitsResults]
set Name_Field = (select MAX (b2.Name_Field)
from [DMSEngine].[dbo].[IndexForm_ePermitsResults] b2
where b2.Name_Field <>'' and
b2.ParcelID_Field = ParcelID_Field and
ParcelID_Field = 12257
)
where ParcelID_Field = 12257 and Name_Field = ' ';