让我们来看一个简单的表复制的T-sql操作(用SELECT复制表,只复制结构和数据,不会复制比如索引,外键等...)
SELECT *
INTO tb_Account_Bak
FROM tb_Account;
--复制表[tb_Account]的数据结构和所有数据到[tb_Account_Bak]表中。
注:[tb_Account_Bak]表如果已经存在,复制会失败。
SELECT Id,Name
INTO tb_Account_Bak
FROM tb_Account
--复制表[tb_Account]中的Id和Name字段到新表[tb_Account_Bak]表中。
SELECT Id,Name,Code
INTO tb_Account_Bak
FROM tb_Account
WHERE [Status]=1 AND [Type]=1
--复制[tb_Account]表中的Id、Name、Code字段,这里给出了条件,只复制满足Status=1和Type=1的记录。
SELECT *
INTO tb_Account_Bak
FROM tb_Account
WHERE 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]到当前数据库
--TestConn为链接名 Base为库名 dbo为架构名 tb_Account为表表SELECT * INTO tb_Account_Bak FROM TestConn.Base.dbo.tb_Account
为了复制方便,有时候我们可以创建一个存储过程来复制
CREATE PROCEDURE SP_CopyNewTable(@NewTableName varchar(50),@OldTableName varchar(50))
AS
BEGIN
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)
END
GO
--这个存储过程需要传入两个参数,NewTableName是生成表的名称,OldTalbeName为已有表的名称
EXEC SP_CopyNewTable 'tb_Account_Bak','tb_Account'
--以后复制表执行CopyNewTable就可以轻松复制了