sql 更新一个字段,条件是.....

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 更新一个字段,条件是.....相关的知识,希望对你有一定的参考价值。

sql 两个表a和b , 表A字段'行政区划','名称',表B字段'行下区划','名称',现在,表A的行下区划都是空的,表B是全国制定的行政区划,表A的名称不规范,但包含关键字,比如'湖南省什么市当阳县',表B的名称比较精炼,比如就两个字'当阳',如何用一个UPDATE更新表A的行政区划
update 表A set 行政区划=表B.行政区划 from 表A,表B where charindex(表B.行政区划,行政区划)>0
上面这句不行,用LIKE行不?请高人帮忙

参考技术A update 表A set 行政区划=表B.行政区划 from 表A,表B where charindex(表B.行政区划,行政区划)>0

你这句写的明显有问题
表A和表B都没有关联的,,,你怎么更新,,
关联更新的结构是下面的
update a set 字段=b.字段
from a,b
where a.关联字段=b.关联字段
and 其他条件追问

写一下呗,大神

追答

你A,B有没有关联字段,,,,

参考技术B 消息 8152,级别 16,状态 13,第 1 行
将截断字符串或二进制数据。
语句已终止。

这个你看看两个表的对应字段的长度是否一致,如果字段长度为20,你插入的记录长度为30就会出现这个错误,检查看看。。。追问

已经改为一样的了,但无法绑定由多个部分组成的标识符

参考技术C 这样的问题建议使用子查询,这样容易出错,类似于
update 表A set 行政区划= select 表B.行政区划 from 表B where ****追问

写一下哈,高手

参考技术D update 表A
set 行政区划=表B.行政区划
from 表A,表B
where charindex(表B.行政区划,表A.名称)>0追问

消息 8152,级别 16,状态 13,第 1 行
将截断字符串或二进制数据。
语句已终止。

追答

你看下表A和表B的“行政区划”列的数据类型和长度是否一致

追问

消息 4104,级别 16,状态 1,第 1 行
无法绑定由多个部分组成的标识符 "表B.行政区划"。

追答

update a
set 行政区划=b.行政区划
from 表A a
inner join
(
select distinct 行政区划 from 表B
) b
on charindex(b.行政区划,a.名称)>0

本回答被提问者采纳

关于SQL触发器 B表读取A表的字段信息 并更新到指定的B表字段

这是A表
这是A表TBL_ACCOUNT
这是B表TBL_ACCOUNT_DETAIL
这是A表被读取的字段ACCOUNTID和REGISTERDAT字段
这是B表需更新的字段ACCOUNTID和ACTIVEDATE字段
B表ACCOUNTID字段需要和A表的ACCOUNTID字段一样
B表的ACTIVEDATE字段需要和A表的REGISTERDAT字段
有好心人写个这样的触发器我吗? 感激不尽
环境是SQL2008

参考技术A 似乎在此类场景下,a表和b表应该有个关联条件,你不会是期望b表的所有记录中的b字段都修改为6吧?
失败的问题倒是好说,在触发器中发现执行不成功,就回滚(rollback),这样前端可以通过捕获异常的方式得知。
参考技术B

是在什么时候触发?新增的时候,还是更新的时候?


create trigger tri_a -- 触发器的名称
on TBL_ACCOUNT_DETAIL
for insert  --写成新增触发,如果不是,可以相应更改
as
begin
   update TBL_ACCOUNT_DETAIL set ACTIVEDATE = b.REGISTERDAT
from TBL_ACCOUNT_DETAIL a,TBL_ACCOUNT  b,insert c
where a.ACCOUNTID = b.ACCOUNTID --这个需要两表更新的条件
      and a.关键字 = c.关键字 -- 只更新新增的数据
end

以上是关于sql 更新一个字段,条件是.....的主要内容,如果未能解决你的问题,请参考以下文章

sql中如何更新符合条件的值

MySQL 仅在条件为真时更新主字段

SQL语句中where条件的写法

循环遍历带有更新字段条件的游标 [PLSQL]

SQL 语句 以某一个字段为条件 修改某一个字段的值

SQL想更新主表内容,条件为次表中的条件怎么办