1. 程式人生 > >SQLServer使用sql語句複製資料庫

SQLServer使用sql語句複製資料庫

1、sql語句備份/還原資料庫

1.1複製資料庫結構和資料

BACKUP DATABASE Test TO DISK = 'c:\test.bak'--備份(注:Test是需要備份的資料庫的名稱;路徑可以隨意選擇;test.bak是備份的檔案的名稱)

RESTORE DATABASE TestBak FROM DISK ='c:\test.bak' WITH MOVE 'test' TO 'c:\testbak.mdf',MOVE 'test_log' TO 'c:\testbak.ldf'--還原(注:TestBak是還原的資料庫的名稱)

拓展sql語句:

RESTORE FILELISTONLY

FROM DISK = 'c:\test.bak' --得到邏輯檔案資訊


此操作不僅複製了資料庫結構,而且還複製了資料。

1.2只複製資料庫結構

   此方法利用了一個折中的方法。先利用1.1的操作步驟,備份和還原資料庫的結構和資料。然後,再刪除資料庫中的資料,這樣就相當於只複製資料庫結構了。不過這種方法有點繞彎。

(另,本人現在還沒有找到sqlserver只複製資料庫結構的簡單方法!)

刪除資料庫中的資料:

一鍵清空資料庫中的所有資料:

exec test.dbo.sp_msforeachtable  @Command1 ='truncate table ?'

一張表一張表刪除資料:

truncate TABLE 表名

2、迴圈複製表

use test

select name from sysobjects where OBJECTPROPERTY(id,N'IsUserTable')=--取得某資料庫中的使用者表名

CREATE DATABASE test1(目標資料庫)--建立一個新的資料庫

--此處做一個迴圈,迴圈所有的使用者表名

SELECT * INTO test1.dbo.Users(目標表名)FROM test.dbo.users(原表名)--複製表操作,此操作複製了表結構和資料

SELECT * INTO test1.dbo.Products(目標表名)FROM test.

dbo.Products(原表名)WHERE 1=--複製表操作,此操作僅僅複製表結構

   此方法適合資料庫中表數量較少的時候,若表數量太大,就比較浪費資源了。

另,複製表操作只能複製表的欄位,不能複製主鍵、索引等。