日期:2014-05-19  浏览次数:20531 次

复制数据库结构问题
请问:怎么用SQL语句,将一个数据库的结构复制成另一个数据,当前数据库的数据内容不需要,复制内容包括触发器、过程等等。

不要用备份数据库后,再清掉数据,因为咱数据库太大。

或者有办法得到整个数据库的语句,当然也不能通过企业管理器得到

------解决方案--------------------
右键 点击数据库 -> 所有任务 -> 生成SQL角本

在常规 中 选择全部显示

在选项中 把表的角本 选项全勾上 点确定
------解决方案--------------------
以前老大写的 我没试过 你可以试一试


if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[P_CopyDB] ') and OBJECTPROPERTY(id, N 'IsProcedure ') = 1)
drop procedure [dbo].[P_CopyDB]
GO

/*-- 在 SQLServer 中使用SQLDMO.Transfer 实现数据迁移
存储过程实现源数据库到目标数据库的对象和数据的复制
要求源数据库和目标数据库在同一服务器
如果是要实现不同服务器之间的复制,则需要增加验证信息
--邹建 2005.07(引用请保留此信息)--*/

/*--调用示例

CREATE DATABASE test
EXEC P_CopyDB @Source_DB= 'northwind ',@Des_DB= 'test '
DROP DATABASE test
--*/
CREATE PROCEDURE 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=@@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