SQL server 如何查找库中两个表中是否包含相同的信息?

数据库中已创建两个表A和B,表中内容如下:
表A:

表B:

如何编写T-SQL语句,比较分析两个表,若B表Num列中的号码只要有一个在A表Num列中存在,则调用电脑里的C语言程序(或发出一个命令),并且清空表B。
若B表Num列中的号码在A表Num列中都不存在,则不实行任何操作。

第1个回答  2015-07-10
SELECT * FROM sysobjects WHERE (xtype = 'U')
其中的xtype = 'U' 的意思:xtype char(2) 对象类型。可以是下列对象类型中的一种:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程本回答被网友采纳
第2个回答  2013-04-29
SQL语句
查是否存在B表中num值是否存在A表
select * from B表 where num in (select distinct num from A表),

如果结果数据>0 执行C语句,并执行以下SQL语句

执行清空的语句 Delete from B表 where num in (select distinct num from A表)

希望能帮到你追问

如果结果数据>0 执行C语句 能更具体一点吗?
我执行了 select * from B表 where num in (select distinct num from A表) 后,结果栏给出了在表A中存在的表B中的一行
我想要的结果是:执行了 select * from B表 where num in (select distinct num from A表) 后,若B表Num列中的号码只要有一个在A表Num列中存在,会自动执行一条语句,这条语句的功能是发出一个命令。能帮帮我吗?

追答

其实这个是程序控制模块。我对C语言了解不多。
有2种方式:
1、在前台程序控制(C语言中实现)
begin
Query.close
Query.clear
Query.Sql.add(select * from B表 where num in (select distinct num from A表) )
Query.open
if Query.记录数>0
执行你要的C语句,并执行删除。
end
2、在后台数据库中实现,把你C语言执行语句弄成可执行文件。
建立一个存储过程
declare @num int
set @num=(select count(*) from B表 where num in (select distinct num from A表))
if @num>0
begin
EXEC master..xp_cmdshell "路径\文件"
执行删除语句
end

追问

谢谢你。我想再问你一个问题。

表A:

表B:


已知表B中的这条记录中的密码password和表A中第3条记录的password一样,现在想用T-SQL语句将表A中的Num列中第3条记录中的号码更新为表B中Num列中的这个号码。怎么写呢?亲,帮帮我,我多给你点财富值哈。

追答

原理跟上一个问题类似
根据你提供的条件,TSQL语句大致如下:
update 表A set num=表B.num from 表B where 表A.password=表B.Password

另外:
你可以使用以下的语句查看是否结果正确,如果正确,再执行上面语句
select * from 表A,表B where 表A.password=表B.Password

本回答被提问者采纳
相似回答