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')= 1 --取得某数据库中的用户表名
CREATE DATABASE test1(目标数据库) --创建一个新的数据库
--此处做一个循环,循环所有的用户表名
SELECT * INTO test1.dbo.Users(目标表名)FROM test.dbo.users(原表名) --复制表操作,此操作复制了表结构和数据
SELECT * INTO test1.dbo.Products(目标表名)FROM test.dbo.Products(原表名)WHERE 1=2 --复制表操作,此操作仅仅复制表结构
此方法适合数据库中表数量较少的时候,若表数量太大,就比较浪费资源了。
另,复制表操作只能复制表的字段,不能复制主键、索引等。