在数据库中建了两张表,都有flag字段(类型一样),应当是在程序运行时两张表中的字段值是一致的。可是现在有不一样的,要手工修改一下,可是数据太多,手工不好找啊,怎么样写语句才能找出相同字段不相等的值,也就是怎么用select查出两张表中那个字段不一样的那条记录。
假设A,B为表名,id为主键
select A.id,B.id,A.flag,B.flag from A,B
where A.id=B.id and A.flag<>B.flag<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 
   
 
   
 
   
 
   
 
   

 

 
   

 

现在我想将小红的id号改为03将如何改?
 
   

 

有两种做法,第一种方法比较简单,直接通过设计器就能实现;是这样的:你打开员工表的设计器,右击关系将弹出你创建的主外键关系,在该关系中你将InsertUpadate规则中的更新规则后面的下拉表中选择层叠,如果你想对删除规则也这样规定也可以选择层叠,然后你就可以在修改主表列时,外键表也跟着变化了。(不知道你用的是SQL 2000还是2005,具体步骤可能不太一样,不过思路是相同的)

第二种做法就是写sql语句:

alter table 销售单

Add constraint fk_ygid_xsygid    --约束名

Foreign key(员工id) references 员工(id)

on update cascade  --级联更新

on delete cascade  -- 级联删除

 

Sql Server中的表添加级联更新和级联删除

以前用Sql Server只会对图形界面进行操作,现在发现自己的Sql语言功底是越来越差了,例如如何为两个表添加关联,让他们级联更新和级联删除。
到晚上查了一下,发现可以用两种办法

触发器方式:
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 [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级联查询

Tab1idnamepass...

Tab2:sn,tel,address...

Tab1 里的id Tab2里的sn对应。

查询语句

select * from Tab1 as t1 join Tab2 as t2 on t1.id=t2.sn

这样查询出来会有重复,看下面这句

select top 10 id,name,pass,tel from Tab1 join Tab2 on Tab1.id=Tab2.sn where date_post between '2009/7/14' and '2009/10/21' group by Tab1.id,name,pass,Tab2.tel