如何得到指定数据库中各个表的建表语句,在线等.....

时间:2021-05-11 08:18:28
如题
如何编程得到指定数据库中所有表的建表语句,类似
create table smzhcn (
    id       int            not null,
    stde     char(4)        not null, 
    tmpe     char(4)        not null,
    primary key(id)
);
这样的语句

5 个解决方案

#1


右键→生成脚本

#2


引用 1 楼 wxf163 的回复:
右键→生成脚本
up

#3


引用 2 楼 js_szy 的回复:
引用 1 楼 wxf163 的回复:
右键→生成脚本
up
如何得到指定数据库中各个表的建表语句,在线等.....

#4


1.手工的话,在企业管理器中,生成脚本.

2.用代码的话,参考如下:
获取创建表的SQL语句
--允许配置高级选项
EXEC sp_configure 'show advanced options', 1
GO
-- 重新配置
RECONFIGURE WITH OVERRIDE
GO
-- 启用xp_cmdshell
EXEC sp_configure 'Ole Automation Procedures', 1
GO
--重新配置
RECONFIGURE WITH OVERRIDE
GO
if exists(select 1 from sysobjects where id=object_id('fgetscript') and objectproperty(id,'IsInlineFunction')=0) 
drop function fgetscript 
go 

create function fgetscript( 
@servername varchar(50)    --服务器名 
,@userid varchar(50)='sa'    --用户名,如果为nt验证方式,则为空 
,@password varchar(50)=''    --密码 
,@databasename varchar(50)    --数据库名称 
,@objectname varchar(250)    --对象名 

) returns varchar(8000) 
as 
begin 
declare @re varchar(8000)        --返回脚本 
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(@re) 
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 
set @re=--'错误号: '+@re 
   char(13)+'错误源: '+@src 
  +char(13)+'错误描述: '+@desc 
return(@re) 
end 
go 

-------------------------------

declare @name varchar(250) 
declare #aa cursor for 
select name from sys.tables  
open #aa 
fetch next from #aa into @name 
while @@fetch_status=0 
begin 
print dbo.fgetscript(''/*servername*/,''/*userid*/,''/*password*/,''/*databasename*/,@name) 
fetch next from #aa into @name 
end 
close #aa 
deallocate #aa 

#5


该回复于2011-01-13 08:52:51被版主删除

#1


右键→生成脚本

#2


引用 1 楼 wxf163 的回复:
右键→生成脚本
up

#3


引用 2 楼 js_szy 的回复:
引用 1 楼 wxf163 的回复:
右键→生成脚本
up
如何得到指定数据库中各个表的建表语句,在线等.....

#4


1.手工的话,在企业管理器中,生成脚本.

2.用代码的话,参考如下:
获取创建表的SQL语句
--允许配置高级选项
EXEC sp_configure 'show advanced options', 1
GO
-- 重新配置
RECONFIGURE WITH OVERRIDE
GO
-- 启用xp_cmdshell
EXEC sp_configure 'Ole Automation Procedures', 1
GO
--重新配置
RECONFIGURE WITH OVERRIDE
GO
if exists(select 1 from sysobjects where id=object_id('fgetscript') and objectproperty(id,'IsInlineFunction')=0) 
drop function fgetscript 
go 

create function fgetscript( 
@servername varchar(50)    --服务器名 
,@userid varchar(50)='sa'    --用户名,如果为nt验证方式,则为空 
,@password varchar(50)=''    --密码 
,@databasename varchar(50)    --数据库名称 
,@objectname varchar(250)    --对象名 

) returns varchar(8000) 
as 
begin 
declare @re varchar(8000)        --返回脚本 
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(@re) 
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 
set @re=--'错误号: '+@re 
   char(13)+'错误源: '+@src 
  +char(13)+'错误描述: '+@desc 
return(@re) 
end 
go 

-------------------------------

declare @name varchar(250) 
declare #aa cursor for 
select name from sys.tables  
open #aa 
fetch next from #aa into @name 
while @@fetch_status=0 
begin 
print dbo.fgetscript(''/*servername*/,''/*userid*/,''/*password*/,''/*databasename*/,@name) 
fetch next from #aa into @name 
end 
close #aa 
deallocate #aa 

#5


该回复于2011-01-13 08:52:51被版主删除