如何用SQL语句复制表的结构,复制整个数据库

如题所述

1.复制表结构:只能复制表的字段,不能复制主键、索引等

select top 0 * into 新表名 from 原表名

2.复制整个数据库结构及数据:

create datebase Test --创建目标数据库
exec P_CopyDB @Source_DB='aspnet',@Des_DB='test' --把源数据库整个复制到目标数据库

P_CopyDB存储过程创建过程如下

-----------------------创建存储过程开始--------------------

create proc P_CopyDB
@Des_DB sysname, --目标数据库
@Obj_Type nvarchar(4000)=N'',--复制的对象类型,可以是下列字符串列表:
-- O 所有对象,D 默认值,R 规则,P 存储过程
-- T 表,TR 触发器,DT 用户定义数据类型
-- V 视图,DATA 数据,DEL 删除目标对象
@Source_DB sysname=N'', --源数据库
@ServerName sysname=N'', --服务器名
@UserName sysname=N'', --用户名,不指定则表示使用 Windows 身份登录
@pwd sysname=N'' --密码
AS
SET NOCOUNT ON
DECLARE @srvid int,@Dbid int,@S_dbid int,@D_dbid int,@TransferID int,
@err int,@src varchar(255), @desc varchar(255)

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
EXEC @err=sp_oasetproperty @srvid,'loginsecure',-1
IF @err<>0 GOTO lb_Err

EXEC @err=sp_oamethod @srvid,'connect',NULL,@servername
END
ELSE
EXEC @err=sp_oamethod @srvid,'connect',NULL,@servername,@UserName,@pwd

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 @TransferID,'DestServer',@ServerName
IF @err<>0 GOTO lb_Err

--设置连接用户
IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登录
BEGIN
EXEC @err=sp_oasetproperty @TransferID,'DestUseTrustedConnection',1
IF @err<>0 GOTO lb_Err
END
ELSE
BEGIN
EXEC @err=sp_oasetproperty @TransferID,'DestLogin',@UserName
IF @err<>0 GOTO lb_Err

EXEC @err=sp_oasetproperty @TransferID,'DestPassword',@pwd
IF @err<>0 GOTO lb_Err
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(
SELECT KeyWord=N',D,', Name=N'CopyAllDefaults' UNION ALL
SELECT KeyWord=N',O,', Name=N'CopyAllObjects' UNION ALL
SELECT KeyWord=N',R,', Name=N'CopyAllRules' UNION ALL
SELECT KeyWord=N',P,', Name=N'CopyAllStoredProcedures' UNION ALL
SELECT KeyWord=N',T,', Name=N'CopyAllTables' UNION ALL
SELECT KeyWord=N',TR,', Name=N'CopyAllTriggers' UNION ALL
SELECT KeyWord=N',DT,', Name=N'CopyAllUserDefinedDatatypes' UNION ALL
SELECT KeyWord=N',V,', Name=N'CopyAllViews' UNION ALL
SELECT KeyWord=N',DATA,',Name=N'CopyData' UNION ALL
SELECT KeyWord=N',DEL,', Name=N'DropDestObjectsFirst'
)A WHERE CHARINDEX(KeyWord,
CASE WHEN ISNULL(@Obj_Type,N'')='' THEN ',O,DATA,' ELSE @Obj_Type END)>0
OPEN tb
FETCH tb INTO @src
WHILE @@FETCH_STATUS=0
BEGIN
EXEC @err=sp_oasetproperty @TransferID,@src,1
IF @err<>0 GOTO lb_Err
FETCH tb INTO @src
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:
EXEC sp_oageterrorinfo NULL, @src OUT, @desc OUT
RAISERROR(N'错误编号 %#x, 错误源 "%s", 错误描述 "%s"',16,1,@err,@src,@desc)
RETURN -1

lb_Exit:
EXEC sp_OADestroy @Dbid
EXEC sp_OADestroy @srvid
EXEC sp_OADestroy @TransferID
RETURN @err
GO

-----------------------创建存储过程结束--------------------
温馨提示:内容为网友见解,仅供参考
无其他回答

如何用SQL语句复制表的结构,复制整个数据库
1.复制表结构:只能复制表的字段,不能复制主键、索引等 select top 0 * into 新表名 from 原表名 2.复制整个数据库结构及数据:create datebase Test --创建目标数据库 exec P_CopyDB @Source_DB='aspnet',@Des_DB='test' --把源数据库整个复制到目标数据库 P_CopyDB存储过程创建...

怎样用SQL语句完整复制数据库
1.复制表结构:只能复制表的字段,不能复制主键、索引等select top 0 * into 新表名 from 原表名2.复制整个数据库结构及数据:create datebase Test--创建目标数据库exec P_CopyDB @Source_DB='aspnet',@Des_DB='test' --把源数据库整个复制到目标数据库 ...

SQL语句中如何进行数据复制?
1。表结构相同的表,且在同一数据库(如,table1,table2)Sql:insertintotable1select*fromtable2(完全复制)insertintotable1selectdistinct*fromtable2(不复制重复纪录)insertintotable1selecttop5*fromtable2(前五条纪录)2。不在同一数据库中(如,db1table1,db2table2)sql:insertintodb1..table1se...

SQL Server数据库复制表结构和表数据
有时我们想只复制SQL Server数据库中的某一个表,这时可以先复制表结构,然后再将表数据复制,方法如下。鼠标右击要复制的表,选择“编写表脚本为”“CREATE到”“新建查询编辑器窗口”命令。在查询编辑器窗口中将要复制表的名称修改为新表的名称。修改表名称后,单击“执行”按钮,即可完成新表的表结构...

SQL如何复制表结构?
1、既复制表结构也复制表内容的SQL语句:CREATE TABLE tab_new AS SELECT * FROM tab_old;2、只复制表结构不复制表内容的SQL语句:CREATE TABLE tab_new AS SELECT * FROM tab_old WHERE 1=2;3、不复制表结构,只复制内容的sql语句:SELECT vale1, value2 into Table2 from Table1 ...

mysql如何复制数据到同一张表?
假设表名为 t,执行如下语句即可满足你要求(截图为测试通过):insert into t(no,name) select concat('1',no),name from t;

如何把一个表中的数据复制到另一个表中
在备份数据库的时候,经常都需要把一个表的数据复制到另一个表,来做测试使用,这里就将告诉大家几种复制表格数据的sql。复制表结构及数据到新表select * into 目标表名 from 源表名(要求目标表不存在,因为在插入时会自动创建)只复制表结构到新表 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE ...

Oracle如何复制表的sql语句
如下,表a是数据库中已经存在的表,b是准备根据表a进行复制创建的表:1、只复制表结构的sqlcreate table b as select * from a where 112、即复制表结构又复制表中数据的sqlcreate table b as select * from a3、Oracle复制表的制定字段的sqlcreate table b as select row_id,name,age from a...

怎样用SQL语句完整复制数据库
这种方法可以完全恢复数据库,包括外键,主键,索引。4. 直接拷贝数据文件 把数据库的数据文件(*.mdf)和日志文件(*.ldf)都拷贝到目的服务器,在SQL Server Query Analyzer中用语句进行恢复:EXEC sp_attach_db @dbname = 'test ',filename1 = 'd:\\mssql7\\data\\...

SQL如何复制表或表结构?
1.create table  tabname like oldtab 2.create table tabname select * from oldtab  where 1=2 3.select * into tabname from oldtab where 1=2 4.show create table tabname , 然后将创建表命令拷贝出来,更改table的名字,就可以建立一个完全一样的表 假设两表结构一样 1....

相似回答