sql server 级联更新 急急急!

Posted

tags:

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

我在网上看到了级联更新的方法,但是就是看不懂,哪位高手直接给个代码!谢谢!
我的问题是这样的:我有两个表:员工(id,姓名,年龄,地址),销售单(销售编号,员工id,销售量),员工表的主键是id,销售单表的主键是销售编号,其中员工id是引用员工表id的外键。
我想做的是:我要更新员工表中id比如:

id 姓名 年龄 地址
01 小红 24 青岛
02 小白 25 青岛

销售编号 员工id 销售量
01 01 200
02 02 180

现在我想将小红的id号改为03将如何改?
网上有人给出了级联更新的语法:
Alter TABLE [dbo].[T_USERGROUP] ADD
CONSTRAINT [FK_T_USERGROUP_T_ACCTTEMPLATE] FOREIGN KEY
(
[ATNAME]
) REFERENCES [dbo].[T_ACCTTEMPLATE] (
[ATNAME]
) ON Update CASCADE ON Delete CASCADE
但是我看不太懂,请给出级联更新的具体代码(结合我这两个表)!谢谢!
我用的是2000,
您的意思是从sql届面操作就可以?
那样的话,跟我所说的用代码的方法能达到相同的效果吗?
谢谢您!

有两种做法,第一种方法比较简单,直接通过设计器就能实现;是这样的:你打开员工表的设计器,右击关系将弹出你创建的主外键关系,在该关系中你将Insert和Upadate规则中的更新规则后面的下拉表中选择“层叠”,如果你想对删除规则也这样规定也可以选择“层叠”,然后你就可以在修改主表列时,外键表也跟着变化了。(不知道你用的是SQL 2000还是2005,具体步骤可能不太一样,不过思路是相同的)
第二种做法就是写sql语句:
alter table 销售单
Add constraint fk_ygid_xsygid --约束名
Foreign key(员工id) references 员工(id)
on update cascade --级联更新
on delete cascade --级联删除

恩,两种方法的效果是一样的。你自己选择!
参考技术A sql server 级联更新
触发器方式: create trigger trg_A on A for update,delete as begin if exists(select 1 from inserted) update B set Name=(select Name from inserted) where Name=(select Name from deleted) else delete B where Name=(select Name from deleted) end go 要使用级联性更新和删除,用户可以在Alter TABLE 语句的CONSTRAINT子句中使用ON Update CASCADE 和/或 ON Delete CASCADE 关键字。注意他们都必须是应用于外键的。 级联更新和级联删除方式: Alter TABLE [dbo].[T_USERGROUP] ADD CONSTRAINT [FK_T_USERGROUP_T_ACCTTEMPLATE] FOREIGN KEY ( [ATNAME] ) REFERENCES [dbo].[T_ACCTTEMPLATE] ( [ATNAME] ) ON Update CASCADE ON Delete CASCADE

急急急!应用程序在sql server2005里执行的sql语句怎样查看!

我用的一个软件,准备自己参照他的数据库,再搞一个出来,
比如说,我在应用程序里点一个查询,对应的就要把该查询所执行的sql 语句 获取到,怎么办,在网上看了N多资料,愣是没找到,哎,
复制的别来,哎,各位大侠,回答的好 问题解决了再加分。。

首先你参照的软件用到的数据库SQL SERVER环境你有没有,如果有你可以监测SQL执行的情况,那样可以获取SQL执行的语句。不过现在很多程序都对SQL进行了封装,如果存储过程加密了,那还得费一翻功夫。追问

额,不是吧, 我看网上说有什么工具可以获取出来,就是不知道怎么弄。 哎。。。

追答

不需要第三方工具,只是要你知道那款软件的SQL环境,如果有那环境,你可以截获SQL执行情况。

追问

什么是环境,汗,我小白一个,买的碟子,数据库是自动安装的,环境可能不知道吧。哎

追答

你那款软件运行需要的环境呀,你当前能否运行那款软件,如果可以,那就可以通过SQL SERVER里面的监测功能,看当前正在执行什么SQL语句。

追问

对对对,就是监测功能,怎么用,我不知道。 我这是sql server 2005的。

追答

你以SA连接到数据库,然后到“管理”——“活动监视器”中可以看到当前SQL正在执行的情况。

参考技术A 1、你是想问在你点击完你做的“查询”按键后,它执行了那条查询语句吗?
如果是这样的话,方法比较多,比如:以java为例,在对应执行的语句后加一条输出log,形式如下->System.out.println("XXXXXX");当执行到时,会在控制台打出这个log

2、如果你是想在程序中在执行完查询后,别的地方能获取到这个查询语句,你可以将该查询语句用一个字符串装起来,查询完后,将这个字符串传给需要得到该字符串的地方即可

-------
不知道能不能解决你的问题,你可以先试试看追问

额,这应用程序是买的,没源码?我怎么看,汗死

追答

解铃还须系铃人啊,如果人家能把源码发给你,最好不过了……

它的数据库文件给你了吗?如果有数据库文件,你可以点击,比较,哪个字段的数据变化了,然后就是根据自己的数据库知识来猜这句该怎么写了... ...

话说这么做的工作量很大啊... ...

不好整啊,不好整啊....

追问

是啊,所以我才想把他的sql语句获取出来,方便啊

参考技术B 这个具体我没有操作过,只是一个建议,你可以实验一下.
方法就是先建立两个数据库之间的连接,就是一个数据库可以访问另一个数据的表,然后分别对数据库中的表建立增删改数据的触发器,使在本数据库上的修改操作同时在另一台数据库上执行.
这里我认为应该把一台设置为主数据库,接收所有的修改操作,另一台只处理用户的查询操作,防止两个服务器同时修改时的冲突.
参考技术C 可以在2005里的时间探查器中进行查找。工具—SQL Server Profiler 参考技术D 没理解你的意图追问

就是我要获取应用程序里在数据库里执行的sql 语句。

第5个回答  2011-08-08 获取语句没意义
有数据库,自己分析吧。追问

只能如此了,哎。。

以上是关于sql server 级联更新 急急急!的主要内容,如果未能解决你的问题,请参考以下文章

hibernate 执行update更新语句 结果数据没有更新是怎么回事?求解!!!急急急~!!

sql server数据库连接的问题 急急急!!!

急急急sqlserver怎么把行转成列

急急急!应用程序在sql server2005里执行的sql语句怎样查看!

刚安装的sql server 2008,总是连接不到数据库引擎,这是啥问题?急急急!

sql server 中如何查询学生表中每位学生全部科目中最高分对应的那行数据呢? 急急急 !