--目標服務器表不存在時。在目標服務器運行:
select * into 目標服務器的表名 from openrowset
('msdasql','driver={sql server};server=源服務器ip;uid=源服務器數據庫用戶名;pwd=源服務器數據庫密碼','select * from 源服務器數據庫名..源服務器數據庫中表名')a
--目標服務器表存在時。前提條件,兩表字段必須相同。在目標服務器運行:
insert into 目標服務器的表名 select * from openrowset
('msdasql','driver={sql server};server=源服務器ip;uid=源服務器數據庫用戶名;pwd=源服務器數據庫密碼','select * from 源服務器數據庫名..源服務器數據庫中表名')a
SQLServer中把某個表裏的記錄複製到另一個數據庫的表中
現有數據庫a和數據庫b,數據庫a裏有表table1,數據庫b裏有表table2.
現在要把表table1裏的記錄複製到table2中,不同情況採用不同方法:
1. table1和table2表結構相同
use b
insert into table2 select * from a.dbo.table1
2. table1和table2表結構不相同
use b
insert into table2(c1,c2) select c1,c2 from a.dbo.table1
coolxiaoyi:c1,c2爲需要複製的列。
3. 如果還沒有創建表table2,可以直接將table1的表結構和記錄都複製到數據庫b中
use b
select * into table2 from a.dbo.table1
這樣做有一個問題,就是有時主外鍵關係不能複製過去(不知道什麼原因),需要在執行完sql語句後自己再設置一下主外鍵。
4. 注意table2中是否有自增長字段
如果有自增長字段,使用以上sql語句時會報錯:僅當使用了列列表並且 IDENTITY_INSERT 爲 ON 時,才能爲表'table2'中 的標識列指定顯式值。
可以先修改table2表,去掉自增長標識,複製完記錄後再修改回來。
或者用2.中的sql語句,不復制自增長字段,複製其他字段。