在数据库中建了两张表,都有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" />
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将如何改?
有两种做法,第一种方法比较简单,直接通过设计器就能实现;是这样的:你打开员工表的设计器,右击关系将弹出你创建的主外键关系,在该关系中你将Insert和Upadate规则中的更新规则后面的下拉表中选择“层叠”,如果你想对删除规则也这样规定也可以选择“层叠”,然后你就可以在修改主表列时,外键表也跟着变化了。(不知道你用的是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
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
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级联查询
Tab1:id,name,pass...
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
转载于:https://blog.51cto.com/zanchun/262488