请问一个关联问题

mmbest 2009-10-19 03:41:17
先决条件:A.ID与B.ID关联。
现在我直接修改A.ID是会报错的。
问题1,如何暂时关闭表与表的关联,然后再恢复关联。用SQL语句来解决

2,如何通过SQL语句来查询,A表与哪个表关联,并显示字段。



谢谢大家
...全文
82 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmbest 2009-10-19
  • 打赏
  • 举报
回复
thanks xman_78tom!
xman_78tom 2009-10-19
  • 打赏
  • 举报
回复
SYBASE 没用过。可能不支持此语句。建议你到 SYBASE 区中发。
mmbest 2009-10-19
  • 打赏
  • 举报
回复
hi xman_78tom:
谢谢你的解答,我这里的环境是SYBASE 12.5 使用:
ALTER TABLE k_store NOCHECK CONSTRAINT pk_k_store
报错:CONSTRAINT不认识
xman_78tom 2009-10-19
  • 打赏
  • 举报
回复
可以直接通过 UPDATE 语句更新。但是,有以下两种情况:
在被引用表上更新主键,如果该主键有被引用,SQL SERVER 会自动通过级联操作(创建约束时需使用 ON UPDATE CASCADE 选项)对引用表上相应的外键作相应的修改。
在引用表上更新外键(需要保证更新后的值仍然是被引用表主键的值),如果需要被引用表的主键也作相应的修改,情况会比较复杂,可能需要编写存储过程或触发器,不是一条语句可以实现的。




mmbest 2009-10-19
  • 打赏
  • 举报
回复
hi xman_78tom:
如果A表与B表 ID列是主键并且关联。
我要同时更新ID列,语句应该怎么写呢?
xman_78tom 2009-10-19
  • 打赏
  • 举报
回复
fk_constraint 是 FOREIGN KEY 约束名,不是列名。可通过 sp_help 'tabname' 获取相应的约束名。

mmbest 2009-10-19
  • 打赏
  • 举报
回复
如果A表与B表 ID列关联。
那么我要同时更新ID列,语句应该怎么写呢?
mmbest 2009-10-19
  • 打赏
  • 举报
回复
hi xman_78tom:

你提出的 禁用 FOREIGN KEY 约束:ALTER TABLE tabname NOCHECK CONSTRAINT fk_constraint 好像不起作用。
ALTER TABLE A NOCHECK CONSTRAINT id 执行失败。
提示 约束 id 不属于表 A

ID在A中不属于约束,而属于 相关联 类。
xman_78tom 2009-10-19
  • 打赏
  • 举报
回复
1、禁用 FOREIGN KEY 约束:ALTER TABLE tabname NOCHECK CONSTRAINT fk_constraint
启用 FOREIGN KEY 约束:ALTER TABLE tabname CHECK CONSTRAINT fk_constraint

2、查看表的相关性:sp_depends [ @objname = ] '<object>'
dawugui 2009-10-19
  • 打赏
  • 举报
回复
第二个:

sp_depends
显示有关数据库对象相关性的信息(例如,依赖表或视图的视图和过程,以及视图或过程所依赖的表和视图)。不报告对当前数据库以外对象的引用。

jwdream2008 2009-10-19
  • 打赏
  • 举报
回复
学习!
SQL77 2009-10-19
  • 打赏
  • 举报
回复
1.
禁用那些约束
2
系统关联表,
快乐_石头 2009-10-19
  • 打赏
  • 举报
回复
1,如何暂时关闭表与表的关联,然后再恢复关联。用SQL语句来解决
這樣A裡沒有 再關聯依然抱錯
sgtzzc 2009-10-19
  • 打赏
  • 举报
回复
看外键约束
dawugui 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 mmbest 的回复:]
先决条件:A.ID与B.ID关联。
现在我直接修改A.ID是会报错的。
问题1,如何暂时关闭表与表的关联,然后再恢复关联。用SQL语句来解决

    2,如何通过SQL语句来查询,A表与哪个表关联,并显示字段。


                                                    谢谢大家
[/Quote]
/*
标题:两表通过字段关联进行级联删除。
作者:爱新觉罗·毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-11-20
地点:广东深圳
*/

create table ta(id int not null)
create table tb(id int , aid int)
insert into ta values(1)
insert into ta values(2)
insert into tb values(1 , 1)
insert into tb values(2 , 2)
insert into tb values(3 , 1)
go

--一、查看原始数据
--ta表的原始数据
select * from ta
/*
id
-----------
1
2
*/
--tb表的原始数据
select * from tb
/*
id aid
----------- -----------
1 1
2 2
3 1
*/

--二、看看没有创建级联删除时的情况(删除ta表id=1的数据,看看是否影响tb表)
delete from ta where id = 1
select * from ta
/*
id
-----------
2
*/
select * from tb
/*
id aid
----------- -----------
1 1
2 2
3 1
*/

--三、恢复原始数据,创建级联删除,删除ta表id=1的数据,看看是否影响tb表
insert into ta values(1)
--为ta创建主健
alter table ta add constraint pk_ta_id primary key (id)
go
--为tb创建外健,并指定级联删除
alter table tb add constraint fk_tb_aid foreign key (aid) references ta(id) on delete cascade
go
delete from ta where id = 1
select * from ta
/*
id
-----------
2
*/
select * from tb
/*
id aid
----------- -----------
2 2
*/

--删除级联约束
alter table tb drop constraint fk_tb_aid
go
--删除测试表
drop table ta , tb
go

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧