关于SQL的一个问题,求高手指教

有两张表:table_1,table_2table_1codehxrqjkztuserid1201005121630102220100612163010232010071... 有两张表:table_1,table_2

table_1

code hxrq jkzt userid
1 20100512 1 630102
2 20100612 1 630102
3 20100712 2 630103
4 20100811 3 630102
5 20100910 4 630102

table_2
code userid user_zt
1 630102 1

假如在table_1表中写入
6 20101010 5 630102
这样一条记录后,自动的让所有 userid=‘630102’的记录中jkzt字段都等于5,userid=‘630103’的记录不改变
并且table_2表中userid=‘630102’记录中user_zt 也等于 5

jkzt列表示借款状态,1表示正常,2表示逾期……,5表示已还款。
当这一列的最后一条记录等于5时,所有这个人的相关借款记录应该都变为5已还款

用什么做呢?存储过程还是视图还是什么可以达到这个功能呢?
展开
 我来答
wangzhiqing999
2010-08-27 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3226万
展开全部
楼主这种情况,可以使用2种方案:

1、不直接用 INSERT 语句来插入数据。
专门写个存储过程,传入参数,判断插入、更新等操作逻辑。
只通过这个存储过程来负责插入数据的操作。

缺点是 假如这个表, 有人直接用 INSERT 语句插入数据了,那么可能就会产生一些问题。

=================================================

2、使用“触发器”

就是 插入数据的“之前” 或者 “之后”

判断 那个 jkzt 是否等于 5 。
如果满足的, 都额外更新另外几个数据。

如果不满足,就不做额外的动作。

=================================================
下面是使用触发器的例子代码 与执行结果:

1> CREATE TABLE table_1 (
2> code INT,
3> hxrq INT,
4> jkzf INT,
5> userid INT
6> );
7> GO
1>
2>
3> INSERT INTO table_1 VALUES (1,20100512,1,630102);
4> INSERT INTO table_1 VALUES (2,20100612,1,630102);
5> INSERT INTO table_1 VALUES (3,20100712,2,630103);
6> INSERT INTO table_1 VALUES (4,20100811,3,630102);
7> INSERT INTO table_1 VALUES (5,20100910,4,630102);
8> GO

(1 行受影响)
1>
2>
3> CREATE TABLE table_2(
4> code INT,
5> userid INT,
6> user_zt INT
7> );
8> GO
1>
2> INSERT INTO table_2 VALUES (1,630102,1);
3> GO

(1 行受影响)

1> CREATE TRIGGER AfterInsertTable_1
2> ON table_1
3> FOR INSERT
4> AS
5> DECLARE
6> @InsertUserID INT, -- 用于暂存 Insert 进来的 UserID
7> @InsertJkzf INT; -- 用于暂存 Insert 进来的 JKZF
8> BEGIN
9>
10> -- 取得本次插入的 ID, JKZF 数据.
11> SELECT @InsertUserID = userid, @InsertJkzf = jkzf FROM inserted;
12>
13> -- 判断 如果 本次插入的 JKZF = 5,那么更新 “该用户” 其他数据
14> IF @InsertJkzf = 5
15> BEGIN
16> UPDATE table_1 SET jkzf = 5 WHERE userid=@InsertUserID;
17> UPDATE table_2 SET user_zt = 5 WHERE userid=@InsertUserID;
18> END;
19>
20> END;
21> go
1>
2> INSERT INTO table_1 VALUES (6,20101010,5,630102);
3> go

(5 行受影响)
1>
2> SELECT * FROM table_1;
3> go
code hxrq jkzf userid
----------- ----------- ----------- -----------
1 20100512 5 630102
2 20100612 5 630102
3 20100712 2 630103
4 20100811 5 630102
5 20100910 5 630102
6 20101010 5 630102

(6 行受影响)
1>
2> SELECT * FROM table_2;
3> go
code userid user_zt
----------- ----------- -----------
1 630102 5

(1 行受影响)
1>
2>
sosay88
2010-08-27 · TA获得超过536个赞
知道小有建树答主
回答量:445
采纳率:0%
帮助的人:379万
展开全部
汗,都不说清楚,怎么解决了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
youngchulli
2010-08-27 · TA获得超过102个赞
知道答主
回答量:126
采纳率:0%
帮助的人:88.8万
展开全部
insert into table_1 (code,hxrq,jkzt,userid) values('6','20101010','5','630102');
update table_1 set jkzt = '5' where userid=‘630102’;
update table_2 set user_zt = '5';

方法1: 可以用表关联实现,
方法2: 可以用代码实现,加事务回滚。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式