获取建表脚本

bulletCoderHope 2007-02-08 09:28:18
在看关于复制的内容的时候看到快照就是把建表脚本和数据副本发到订阅服务器上去执行
所以当表建立后其脚本是保存在数据库上的,但是使用sp_helptext 并不能把建表脚本查询出来。

请问用什么方法可以把已经存在的表的建立脚本读取出来?
...全文
450 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gc_ding 2007-02-12
  • 打赏
  • 举报
回复
/*
在查询分析器中调用sqldmo生成脚本--存储过程

邹建 2003.07(引用请保留此信息)--*/

/*--调用实例
declare @str varchar(8000)
exec sp_getscript 'zj','','','xzkh_sa','地区资料',@str output
print @str
*/
if exists(select 1 from sysobjects where id=object_id('sp_getscript') and objectproperty(id,'IsProcedure')=1)
drop procedure sp_getscript
go
create procedure sp_getscript
@servername varchar(50) --服务器名
,@userid varchar(50) --用户名,如果为nt验证方式,则为空
,@password varchar(50) --密码
,@databasename varchar(50) --数据库名称
,@objectname varchar(250) --对象名
,@re varchar(8000) output --返回脚本
as
declare @srvid int,@dbsid int --定义服务器、数据库集id
declare @dbid int,@tbid int --数据库、表id
declare @err int,@src varchar(255), @desc varchar(255) --错误处理变量

--创建sqldmo对象
exec @err=sp_oacreate 'sqldmo.sqlserver',@srvid output
if @err<>0 goto lberr

--连接服务器
if isnull(@userid,'')='' --如果是 Nt验证方式
begin
exec @err=sp_oasetproperty @srvid,'loginsecure',-1
if @err<>0 goto lberr

exec @err=sp_oamethod @srvid,'connect',null,@servername
end
else
exec @err=sp_oamethod @srvid,'connect',null,@servername,@userid,@password

if @err<>0 goto lberr

--获取数据库集
exec @err=sp_oagetproperty @srvid,'databases',@dbsid output
if @err<>0 goto lberr

--获取要取得脚本的数据库id
exec @err=sp_oamethod @dbsid,'item',@dbid output,@databasename
if @err<>0 goto lberr

--获取要取得脚本的对象id
exec @err=sp_oamethod @dbid,'getobjectbyname',@tbid output,@objectname
if @err<>0 goto lberr

--取得脚本
exec @err=sp_oamethod @tbid,'script',@re output
if @err<>0 goto lberr

--print @re
return

lberr:
exec sp_oageterrorinfo NULL, @src out, @desc out
declare @errb varbinary(4)
set @errb=cast(@err as varbinary(4))
exec master..xp_varbintohexstr @errb,@re out
select 错误号=@re, 错误源=@src, 错误描述=@desc
return

go
bulletCoderHope 2007-02-12
  • 打赏
  • 举报
回复
3q一下楼上的

已经安装sp4补丁包
scptxfr.exe 我在bin目录下没有找到该文件,去哪里搞过来的?
zlp321002 2007-02-11
  • 打赏
  • 举报
回复
数据库中的表对象脚本可以用以下存储过程来备份.

它可以备份数据库中任何对象脚本(不包括数据信息)

注意: 以下存储过程在sql server 2000 sp3以上版本测试通过.

--生成整个数据库脚本.
Create PROC P_GetJenerateCurrentDBObjectsScript
@ServerName varchar(20)='', --要备份的服务器名称,不指定则备份当前服务器
@dbname varchar(20)='', --要备份的数据库名称,不指定则备份当前数据库
@Password varchar(20)='', --密码
@BackupPath varchar(200)='D:\数据库脚本备份\' --文件保存路径
As
Begin
declare @Path varchar(400),@Cmd varchar(1000)
exec master.dbo.xp_regread
'HKEY_LOCAL_MACHINE',
'SOFTWARE\Microsoft\MSSQLSERVER\setup',
'SQLPath',@Path output
set @Path = ''''+replace(@Path,':\',':\"')+'"' + '\Upgrade\scptxfr.exe'
set @Cmd='master.dbo.xp_cmdshell '+@Path

if isnull(@ServerName,'')='' set @ServerName=@@ServerName
if isnull(@dbname,'')='' set @dbname=DB_NAME()

--生成文件夹和目录
set @Cmd=@Cmd+N' /s '+@ServerName+' /d '+@dbname+' /p '+@Password+' /I /f '
set @BackupPath='MD '+@BackupPath+''+@dbname+''
exec master..xp_cmdshell @BackupPath
--生成数据库脚本
set @Cmd=@Cmd+N''+REPLACE(@BackupPath,'MD','')+'\'+convert(varchar(10),getdate(),112)+'.sql'''
exec(@Cmd)
End
GO



--调用如下:

P_GetJenerateCurrentDBObjectsScript '','','密码'

试下这个办法.这个办法好像是J9988老实最先用的.大版主,也好象用过.我封装了一个存储过程..
它会生成所有脚本..和目录文件...

如果没有哪个scptxfr.exe 文件要复制过来才能用....


bulletCoderHope 2007-02-11
  • 打赏
  • 举报
回复
顶一下
bulletCoderHope 2007-02-08
  • 打赏
  • 举报
回复
想用tsql做出来啊,这样客户段也可以返回该建表脚本嘛
marco08 2007-02-08
  • 打赏
  • 举报
回复
在企业管理器中用生成SQL脚本向导就可以了

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧