1.复制表结构:只能复制表的字段,不能复制主键、索引等
select top 0 * into 新表名 from 原表名
2.复制整个数据库结构及数据:
create datebase Test
exec
-----------------------创建存储过程开始--------------------
create proc P_CopyDB
@Des_DB
@Obj_Type
@Source_DB
@ServerName
@UserName
@pwd
AS
SET NOCOUNT ON
DECLARE @srvid int,@Dbid int,@S_dbid int,@D_dbid int,@TransferID int,
IF ISNULL(@ServerName,N'')=N'' SET @ServerName='.'--默认为本地数据库
IF ISNULL(@Source_DB,N'')=N'' SET @Source_DB=DB_NAME()
--创建sqldmo对象·
EXEC @err=sp_oacreate 'sqldmo.sqlserver',@srvid OUT
IF @err<>0 GOTO lb_Err
--连接服务器
IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登录
BEGIN
END
ELSE
IF @err<>0 GOTO lb_Err
--获取数据库集
EXEC @err=sp_oagetproperty @srvid,'databases',@Dbid OUT
IF @err<>0 GOTO lb_Err
--选择源数据库
EXEC @err=sp_oamethod @Dbid,'item',@S_dbid OUT,@Source_DB
IF @err<>0 GOTO lb_Err
--选择目标数据库
EXEC @err=sp_oamethod @Dbid,'item',@D_dbid OUT,@Des_DB
IF @err<>0 GOTO lb_Err
--设置复制的对象
EXEC @err=sp_oacreate 'SQLDMO.Transfer',@TransferID OUT
IF @err<>0 GOTO lb_Err
--设置目标服务器信息
EXEC @err=sp_oasetproperty
IF @err<>0 GOTO lb_Err
IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登录
BEGIN
END
ELSE
BEGIN
END
EXEC @err=sp_oasetproperty @TransferID,'DestDatabase',@Des_DB
IF @err<>0 GOTO lb_Err
DECLARE tb CURSOR FAST_FORWARD LOCAL
FOR
SELECT Name FROM(
)A WHERE CHARINDEX(KeyWord,
OPEN tb
FETCH tb INTO @src
WHILE @@FETCH_STATUS=0
BEGIN
END
CLOSE tb
DEALLOCATE tb
--复制对象
EXEC @err=sp_oamethod @S_dbid,'Transfer',null,@TransferID
IF @err<>0 GOTO lb_Err
--结束
SET @err=0
GOTO lb_Exit
--错误处理
lb_Err:
lb_Exit:
GO
-----------------------创建存储过程结束--------------------