本地表、遠程表的複製操作(SQL命令行)

讓我們來看一個簡單的表複製的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]到當前數據庫
SELECT *
INTO tb_Account_Bak
FROM TestConn.Base.dbo.tb_Account
--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就可以輕鬆複製了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章