本地表、远程表的复制操作(SQL命令行)

来源:互联网 发布:雷云mac版安装失败 编辑:程序博客网 时间:2024/05/01 02:12

让我们来看一个简单的表复制的T-sql操作(用SELECT复制表,只复制结构和数据,不会复制比如索引,外键等...)

SELECT *INTO tb_Account_BakFROM tb_Account;
--复制表[tb_Account]的数据结构和所有数据到[tb_Account_Bak]表中。

注:[tb_Account_Bak]表如果已经存在,复制会失败。


SELECT Id,NameINTO tb_Account_BakFROM tb_Account

--复制表[tb_Account]中的Id和Name字段到新表[tb_Account_Bak]表中。


SELECT Id,Name,CodeINTO tb_Account_BakFROM tb_AccountWHERE [Status]=1 AND [Type]=1

--复制[tb_Account]表中的Id、Name、Code字段,这里给出了条件,只复制满足Status=1和Type=1的记录。


SELECT *INTO tb_Account_BakFROM tb_AccountWHERE 1=2
--只复制表结构,并不复制数据


下面,我们来看看怎么操作远程表的复制T-SQL

--1、首先要建立远程连接 注:TestConn为链接名称(随意),SQLOLEDB为链接方式,61.128.128.68为远程主机IP
EXEC sp_addlinkedserver 'TestConn','','SQLOLEDB','61.128.128.68'
--2、登陆
EXEC sp_addlinkedsrvlogin 'TestConn','false',NULL,'sa','password'

--3、复制远程表[tb_Account]到当前数据库
SELECT *INTO tb_Account_BakFROM TestConn.Base.dbo.tb_Account
--TestConn为链接名 Base为库名 dbo为架构名 tb_Account为表表


为了复制方便,有时候我们可以创建一个存储过程来复制

CREATE PROCEDURE SP_CopyNewTable(@NewTableName varchar(50),@OldTableName varchar(50))ASBEGIN    DECLARE @sql varchar(max)    SET NOCOUNT ON;    --如果新表名称已存在,先删除    IF not exists(SELECT 1 FROM sys.objects WHERE name=@NewTableName and type='U')    --复制    SET @sql ='select * into '+ @NewTableName + ' from '+ @OldTableName;    EXEC(@sql)ENDGO
--这个存储过程需要传入两个参数,NewTableName是生成表的名称,OldTalbeName为已有表的名称


EXEC SP_CopyNewTable 'tb_Account_Bak','tb_Account'
--以后复制表执行CopyNewTable就可以轻松复制了


0 0