如何编程得到指定数据库中所有表的建表语句,类似
create table smzhcn (
id int not null,
stde char(4) not null,
tmpe char(4) not null,
primary key(id)
);
这样的语句
5 个解决方案
#1
右键→生成脚本
#2
up
#3
#4
1.手工的话,在企业管理器中,生成脚本.
2.用代码的话,参考如下:
获取创建表的SQL语句
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
#1
右键→生成脚本
#2
up
#3
#4
1.手工的话,在企业管理器中,生成脚本.
2.用代码的话,参考如下:
获取创建表的SQL语句
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