例子: Dim Conn As New ADODB.Connection Dim Strconn As String Strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath & ";Persist Security Info=False" Conn.CursorLocation = adUseClient Conn.Open StrconnRs.Open "Select * into table from " & TableName, Conn, adOpenStatic, adLockBatchOptimistic
设有A表(ID,Name),B表(ID,Name).其中ID为主键。 现将B表中不存在A表的数据插入A表 SQL语句如下: insert into A(ID,name) select B.id,B.name from B where B.id not in(SELECT B.id FROM B,A where (B.id=A.id))本SQL语句要求AB两表中主键相同的记录的其余信息应该相同。因为楼主所说的同样的记录,如果两表的主键值相同,而其余字段值不同的话,那么无论 你怎么插入肯定是会出错的。 除非你的数据库表没有主键
create table a as (select * from b)
楼主所说的源表(A)和目的表(B) 因为从A表中选择出的记录还要和B表进行比较, 所以显然B表是已经存在的, 那么就不能用SELECT ...INTO... 语句(此语句是用来将选择出来的列而新建一张表)就从解决问题的方法来说可以用 LGYAN(紫衣随想) 的INSERT INTO语句来实现: Insert into B Select * from A where id not in (Select id from B)已经通过验证.
那么楼主的要求就好办了。不过要两条语句。1、从目的表B中删除所有A表的数据 Delete from B where ID in(select ID from A)2、添加A表的数据到B表中 insert into B(ID,name) select id,name from A不就行了吗?
刚研究过DTS,不知道你想不想用
1、如果是在sql server中就用触发器实现 2、如果想用ado实现 如果是完全保持一致 ,在第一次同步时 con.execute "Delete From Table B" insert into b select * from A 然后从表B中删除所有A表的数据 Delete from B where 主键 in(select 主键 from A) 添加A表的数据到B表中 insert into B select * from A 不知道楼主用过sql server的导入和导出功能没有,系统提供的方法好象也是通过insert语句实现的。
没有直接的办法,自己写判断的语句,sql无法直接实现.
更新bs已经有的 update tt set tt.LXBH=t1.LXBH, tt.LBBH=t1.LBBH, tt.ffrq=t1.ffrq--必须要加上,不然就会出错 from (select * from T where (DATEDIFF([day], FFRQ, getdate()) = 0)) t1,njgf.book.dbo.T tt where tt.bs =t1.bs --插入不存在的 insert into njgf.book.dbo.T select * from T WHERE (DATEDIFF([day], FFRQ, getdate()) = 0) and T.BS not in (select BS from njgf.book.dbo.T where (DATEDIFF([day], FFRQ, getdate()) = 0) ) 你参考一下 用selet * into 肯定不行。 用dts比较方便
select DISTINCT * into ...
B 表的信息不能删除,因为正在使用中,只能更新。采用两条SQL语句的思路也很好。只是不知DTS是什么,请指教。
Dim Conn As New ADODB.Connection
Dim Strconn As String
Strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DatabasePath & ";Persist Security Info=False"
Conn.CursorLocation = adUseClient
Conn.Open StrconnRs.Open "Select * into table from " & TableName, Conn, adOpenStatic, adLockBatchOptimistic
现将B表中不存在A表的数据插入A表
SQL语句如下:
insert into A(ID,name)
select B.id,B.name from B where B.id not in(SELECT B.id
FROM B,A where (B.id=A.id))本SQL语句要求AB两表中主键相同的记录的其余信息应该相同。因为楼主所说的同样的记录,如果两表的主键值相同,而其余字段值不同的话,那么无论
你怎么插入肯定是会出错的。
除非你的数据库表没有主键
因为从A表中选择出的记录还要和B表进行比较,
所以显然B表是已经存在的,
那么就不能用SELECT ...INTO... 语句(此语句是用来将选择出来的列而新建一张表)就从解决问题的方法来说可以用
LGYAN(紫衣随想) 的INSERT INTO语句来实现:
Insert into B
Select * from A where id not in
(Select id from B)已经通过验证.
Delete from B where ID in(select ID from A)2、添加A表的数据到B表中
insert into B(ID,name)
select id,name from A不就行了吗?
2、如果想用ado实现
如果是完全保持一致 ,在第一次同步时
con.execute "Delete From Table B"
insert into b select * from A
然后从表B中删除所有A表的数据
Delete from B where 主键 in(select 主键 from A)
添加A表的数据到B表中
insert into B select * from A
不知道楼主用过sql server的导入和导出功能没有,系统提供的方法好象也是通过insert语句实现的。
update tt
set tt.LXBH=t1.LXBH,
tt.LBBH=t1.LBBH,
tt.ffrq=t1.ffrq--必须要加上,不然就会出错
from (select * from T where (DATEDIFF([day], FFRQ, getdate()) = 0)) t1,njgf.book.dbo.T tt
where tt.bs =t1.bs
--插入不存在的
insert into njgf.book.dbo.T
select *
from T
WHERE (DATEDIFF([day], FFRQ, getdate()) = 0)
and T.BS not in
(select BS from njgf.book.dbo.T
where (DATEDIFF([day], FFRQ, getdate()) = 0)
)
你参考一下
用selet * into 肯定不行。
用dts比较方便