一.同一数据库中两个不同的表中结构,数据的复制
有如下三个表:
表A:字段1, 字段2, 字段3
表B:字段1, 字段2, 字段3
表C:字段1, 字段2, 字段3
现在想复制A表的字段1,B表的字段2,C表的字段3到表4中去。不需要表中的数据。
用SQL语句应如何实现呢?
答:其实,这里需要考虑一个问题,所到的指定表是不是空表?所以,我们有以下两种情况分别说说: /*table4不存在时*/
select a.col1, b.col2, c.col3
into table4
from tableA a, tableB b, tableC c
where 1 = 0
但是,一旦表4已经存在的话,会报错。如果是想在表4中增加这几个字段,但这些字段的数据不需要添加到表4中来 select
*
into 表5
from
表4 m
left join
(select a.字段1,b.字段2,c.字段3 from 表A a,表B b,表C c where 1<>1) n
on
1=1
drop table 表4
exec sp_rename '表5','表4'
二、1.相同两个表内容复制
insert into 目标数据库名.dbo.表名 select * from 源数据库名.dbo.表名
2.说明:复制表(只复制结构,源表名:a 新表名:b)
SQL: select * into b from a where 1<>1
3.说明:拷贝表(拷贝数据,源表名:a 目标表名:b)
SQL: insert into b(a, b, c) select d,e,f from b;
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/feng19821209/archive/2006/06/08/779356.aspx
二.不同数据库(或不同主机上不同数据库)间表的结构,数据的复制
创建两个连接 !!
--创建链接服务器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
go
--查询示例
select * from srv_lnk.数据库名.dbo.表名
--导入示例
select * into 表 from srv_lnk.数据库名.dbo.表名
这句话一定要写在将要导入的表所在的数据库中
--以后不再使用时删除链接服务器
exec sp_dropserver 'srv_lnk','droplogins'
go
--如果只是临时访问,可以直接用openrowset
--查询示例
select * from openrowset('SQLOLEDB'
,'sql服务器名';'用户名';'密码'
,数据库名.dbo.表名)
这里好像有点问题,我试了一下应该是这样的:select * from openrowset('sqloledb','192.168.24.200';
'abc';'123','20081141.dbo.style'),上面的语句中缺单引号
--导入示例
select * into 表 from openrowset('SQLOLEDB'
,'sql服务器名';'用户名';'密码'
,数据库名.dbo.表名)
在调用!!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gdsimon/archive/2008/08/21/2805101.aspx