`
- 浏览:
1152914 次
-
Sql代码:
-
ifexists(select1fromsysobjectswherename='sp_gent'andtype='P')
-
dropproceduresp_gent
-
go
-
-
createproceduresp_gent
-
@tblnamevarchar(30)=null,
-
@precharvarchar(4)=null,--$:noprint
-
@table_dllvarchar(16384)=nullout,
-
@dbnamevarchar(32)=null,
-
@droptgchar(1)='1',
-
@prxytxvarchar(255)=null,
-
@replacevarchar(20)=null,
-
@tabtypevarchar(1)='A',--A:所有表;P:代理表;U:用户表
-
@indextgvarchar(3)='TPI',--T:纯表;P:主键;I:纯索引;J:除主键外的纯索引(和TP使用与I相同,和I同时使用I失效)
-
@table_segvarchar(32)=null,
-
@index_segvarchar(32)=null
-
as
-
begin
-
setnocounton
-
-
if@tblnameisnullbegin
-
declare@c_tblnamevarchar(30)
-
declarecur_1cursorfor
-
selectnamefromsysobjectswheretype='U'orderbyname
-
opencur_1
-
fetchcur_1into@c_tblname
-
while@@sqlstatus=0begin
-
execsp_gent
-
@tblname=@c_tblname,
-
@prechar=@prechar,
-
@dbname=@dbname,
-
@droptg=@droptg,
-
@prxytx=@prxytx,
-
@replace=@replace,
-
@tabtype=@tabtype,--A:所有表;P:代理表;U:用户表
-
@indextg=@indextg,--A:表和索引;T:纯表;I:纯索引
-
@table_seg=@table_seg,
-
@index_seg=@index_seg
-
fetchcur_1into@c_tblname
-
end
-
closecur_1
-
deallocatecursorcur_1
-
return
-
end
-
-
declare@obj_idint
-
declare@sysstat2int
-
declare@usernamevarchar(30)
-
-
select@obj_id=id,@sysstat2=sysstat2,@username=user_name(uid)
-
fromsysobjectswherename=@tblnameandtype='U'
-
if@@rowcount<>1
-
begin
-
print'table%1!notexists',@tblname
-
gotoerr
-
end
-
if@sysstat2&1024=1024begin
-
ifupper(@tabtype)in('U')
-
gotook
-
end
-
elsebegin
-
ifupper(@tabtype)in('P')
-
gotook
-
end
-
-
declare@colnamevarchar(30)--列名
-
declare@typenamevarchar(30)--类型名称
-
declare@usertypesmallint--类型ID
-
declare@lengthint--长度
-
declare@prectinyint--有效位数
-
declare@scaletinyint--精度
-
declare@def_idint--默认值id
-
declare@nullstinyint--空值
-
declare@identtinyint--标识列
-
declare@index_dllvarchar(16384)
-
-
declare@def_textvarchar(100)
-
declare@ide_textvarchar(30)
-
declare@nul_textvarchar(30)
-
-
declare@cns_textvarchar(500)
-
declare@uni_privarchar(40),@non_cluvarchar(40),@non_univarchar(40)
-
-
declare@lock_schemevarchar(100)
-
-
declare@keysvarchar(500),@iint
-
declare@thiskeyvarchar(30)
-
declare@sorderchar(4)
-
select@keys="",@i=1
-
-
declare@cns_namevarchar(30),@statusint,@indidint
-
declare@idx_namevarchar(50)
-
-
declare@CRNWvarchar(2)--回车换行
-
declare@TABchar(1)
-
-
select@CRNW=convert(varchar(2),0x0d0a)
-
select@TAB=convert(char(1),0x09)
-
-
declare@dbname_dotvarchar(35)
-
ifltrim(@dbname)isnull
-
select@dbname=null,@dbname_dot=null
-
else
-
select@dbname=@dbname+'.',@dbname_dot=@dbname+'..'
-
-
declare@table_namevarchar(30)
-
select@table_name=casewhenltrim(@replace)isnotnullthen@replaceelse@tblnameend
-
-
declare@prefix_tablevarchar(2)
-
select@prefix_table=casewhenltrim(@prxytx)isnotnullthen'r_'elsenullend
-
-
ifcharindex('T',@indextg)>0begin
-
if@droptg<>'0'
-
select@table_dll="ifexists(select1from"+@dbname_dot
-
+"sysobjectswherename='"+@prefix_table
-
+@table_name+"'andtype='U')"
-
+@CRNW+@TAB+'droptable'+@dbname+@username+'.'
-
+@prefix_table
-
+@table_name+@CRNW
-
+casewhen@sysstat2&1024=1024
-
then@TAB+'execsp_dropobjectdef'+@table_name+@CRNW
-
whenltrim(@prxytx)isnotnull
-
then@TAB+'execsp_dropobjectdefr_'+@table_name+@CRNW
-
elsenull
-
end
-
+'go'+@CRNW
-
else
-
select@table_dll=null
-
-
if@sysstat2&1024=1024begin
-
declare@OS_filevarchar(255)
-
select@OS_file=char_valuefromsysattributes
-
whereclass=9andattribute=1and
-
object_cinfo=@tblname
-
if@@rowcount=0begin
-
print'取代理表前缀失败%1!',@tblname
-
gotoerr
-
end
-
select@table_dll=@table_dll+"execsp_addobjectdef"
-
+@table_name
-
+",'"+@OS_file+"','table'"+@CRNW+
-
"createexistingtable"+@dbname+@username+"."
-
+@table_name+"("
-
end
-
elseifltrim(@prxytx)isnotnull
-
select@table_dll=@table_dll+"execsp_addobjectdefr_"
-
+@table_name+",'"+@prxytx
-
+@table_name+"','table'"+@CRNW
-
+"createexistingtable"+@dbname+@username+".r_"
-
+@table_name+"("
-
else
-
select@table_dll=@table_dll+'createtable'+@dbname+@username+'.'
-
+@table_name+'('
-
-
--如果在sybsystemprocs数据库下提交,以下注释掉
-
-
declare@tablnavarchar(255)
-
--select@tablna=tablnafromknp_tablwheretablcd=@tblname
-
--if@@rowcount=0
-
select@tablna=null
-
ifltrim(@tablna)isnotnull
-
select@table_dll=@table_dll+'--'+@tablna
-
-
select@prechar=casewhen@precharisnotnullthenleft(@prechar+space(4),4)else@precharend
-
if@prechar<>'$'begin
-
if@precharisnotnullbegin
-
declare@temp_dllvarchar(16384),@print_dllvarchar(16384)
-
select@temp_dll=@table_dll
-
select@temp_dll=@prechar+@temp_dll
-
whilecharindex(@CRNW,@temp_dll)>0andchar_length(@temp_dll)<>charindex(@CRNW,@temp_dll)+1begin
-
select@print_dll=@print_dll+left(@temp_dll,charindex(@CRNW,@temp_dll)-1)+@CRNW+@prechar
-
select@temp_dll=substring(@temp_dll,charindex(@CRNW,@temp_dll)+char_length(@CRNW),char_length(@temp_dll))
-
end
-
select@print_dll=@print_dll+@temp_dll
-
print'%1!',@print_dll
-
end
-
else
-
print'%1!',@table_dll
-
end
-
-
select@table_dll=@table_dll+@CRNW
-
-
ifltrim(@table_seg)isnullbegin
-
select@table_seg=s.name
-
fromsysobjectso,syssegmentss,sysindexesi
-
whereo.id=object_id(@tblname)
-
andi.id=o.id
-
andi.indid<2
-
andi.segment=s.segment
-
if@@rowcount=0begin
-
print'表%1!所在的段不存在',@tblname
-
gotoerr
-
end
-
end
-
end
-
-
--确定表是否有完整性约束
-
declare@have_conchar(1)
-
ifexists(select1fromsysindexeswhereid=@obj_idandstatus2&2=2)
-
and(ltrim(@prxytx)isnullor@sysstat2&1024=1024)
-
select@have_con='1'
-
else
-
select@have_con='0'
-
-
-
ifcharindex('T',@indextg)>0begin
-
declare@col_intint
-
select@col_int=count(*)fromsyscolumns
-
whereid=@obj_id
-
-
declarecur_colcursorfor
-
selectb.name,b.usertype,c.name,b.length,b.prec,b.scale,b.cdefault,
-
convert(bit,b.status&8)asNulls,
-
convert(bit,b.status&128)asIdent
-
fromsysobjectsa,syscolumnsb,systypesc
-
wherea.name=@tblnameanda.type='U'
-
anda.id=b.id
-
andb.usertype=c.usertype
-
orderbyb.colid
-
-
opencur_col
-
fetchcur_colinto@colname,@usertype,@typename,@length,@prec,@scale,@def_id,@nulls,@ident
-
while@@sqlstatus=0
-
begin
-
--系统定义的数据类型
-
if@usertype<100
-
begin
-
-
ifrtrim(@typename)in('char','varchar','nchar','nvarchar')
-
select@typename=@typename+'('+convert(varchar,@length)+')'
-
elseif@typenamein('numeric','decimal')
-
select@typename=@typename+'('+convert(varchar,@prec)+','+convert(varchar,@scale)+')'
-
elseif@typenamein('float','double')
-
select@typename=@typename+'('+convert(varchar,@prec)+')'
-
elseif@typenamein('binary','varbinary')
-
select@typename=@typename+'('+convert(varchar,@length)+')'
-
end
-
-
select@ide_text=case@identwhen1then'identity'elsenullend
-
select@nul_text=case@nullswhen1then'null'else'notnull'end
-
-
if@def_id>0
-
begin
-
select@def_text=ltrim(rtrim(b.text))
-
fromsysobjectsa,syscommentsb
-
wherea.id=@def_idanda.id=b.id
-
if@@rowcount<>1
-
begin
-
print'取default失败%1!',@def_id
-
gotoerr
-
end
-
whilecharindex(@TAB,@def_text)>0
-
select@def_text=stuff(@def_text,charindex(@TAB,@def_text),char_length(@TAB),'')
-
whilecharindex('',@def_text)>0
-
select@def_text=stuff(@def_text,charindex('',@def_text),char_length(''),'')
-
select@def_text=rtrim(ltrim(@def_text))
-
-
end
-
else
-
select@def_text=null
-
-
declare@thiscolvarchar(500)
-
select@thiscol=
-
casewhenchar_length(@colname)<=10thenleft(@colname+space(10),10)else@colnameend
-
+''+casewhenchar_length(@typename)<=15thenleft(@typename+space(15),15)else@typenameend
-
+''+@def_text
-
+''+@ide_text
-
+''+@nul_text
-
-
if@i=@col_intand(@have_con='0'orcharindex('P',@indextg)<=0)
-
select@thiscol=@thiscol+''
-
else
-
select@thiscol=@thiscol+','
-
-
--如果在sybsystemprocs数据库下提交,以下注释掉
-
declare@colmnavarchar(255)
-
select@colmna=null
-
--select@colmna=colmnafromknp_colmwheretablcd=@tblnameandcolmcd=@colname
-
-
ifltrim(@colmna)isnotnull
-
select@thiscol=@thiscol+'--'+@colmna
-
-
if@prechar<>'$'
-
print'%1!%2!',@prechar,@thiscol
-
-
select@table_dll=@table_dll+@thiscol+@CRNW
-
-
select@i=@i+1
-
fetchcur_colinto@colname,@usertype,@typename,@length,@prec,@scale,@def_id,@nulls,@ident
-
end
-
end
-
-
if@have_con='1'andcharindex('P',@indextg)>0
-
begin
-
-
select@cns_name=name,@status=status,@indid=indid
-
fromsysindexeswhereid=@obj_idandstatus2&2=2
-
-
--print'existconstraint...status=%1!',@status
-
-
if@indid=1
-
select@non_clu='clustered'
-
elseif@indid>1
-
begin
-
if@status&16=16
-
select@non_clu='clustered'
-
else
-
select@non_clu='nonclustered'
-
end
-
-
if@status&2048=2048
-
select@uni_pri='primarykey'
-
else
-
select@uni_pri='unique'
-
-
select@cns_text='constraint'+@cns_name+''+@uni_pri+''+@non_clu
-
-
select@i=1,@keys=''
-
select@thiskey=index_col(@tblname,@indid,@i)
-
while@thiskey<>null
-
begin
-
if@i>1
-
begin
-
select@keys=@keys+","
-
end
-
-
ifltrim(@keys)isnull
-
select@keys=@thiskey
-
else
-
select@keys=@keys+@thiskey
-
-
select@sorder=index_colorder(@tblname,@indid,@i)
-
if(@sorder="DESC")
-
select@keys=@keys+""+@sorder
-
-
select@i=@i+1
-
select@thiskey=index_col(@tblname,@indid,@i)
-
end
-
-
select@cns_text=@cns_text+'('+@keys+')'
-
-
ifltrim(@table_seg)isnullbegin
-
select@table_seg=s.name
-
fromsysobjectso,syssegmentss,sysindexesi
-
whereo.id=object_id(@tblname)
-
andi.id=o.id
-
andi.indid<2
-
andi.segment=s.segment
-
if@@rowcount=0begin
-
print'表%1!所在的段不存在',@tblname
-
gotoerr
-
end
-
end
-
-
ifcharindex('T',@indextg)<=0
-
select@cns_text='altertable'+@dbname+@username+'.'+@table_name+'add'+@cns_text+"on'"+@table_seg+"'"
-
if@prechar<>'$'
-
print'%1!%2!',@prechar,@cns_text
-
-
select@table_dll=@table_dll+@cns_text
-
-
end
-
-
ifcharindex('T',@indextg)>0begin
-
if@prechar<>'$'
-
print'%1!%2!',@prechar,')'
-
-
select@table_dll=left(@table_dll,char_length(@table_dll)-1)+@CRNW+')'
-
-
--表锁计划
-
if@sysstat2&8192=8192
-
select@lock_scheme='lockallpages'
-
elseif@sysstat2&16384=16384
-
select@lock_scheme='lockdatapages'
-
elseif@sysstat2&32768=32768
-
select@lock_scheme='lockdatarows'
-
select@table_dll=@table_dll+@CRNW+@lock_scheme
-
-
if@prechar<>'$'
-
print'%1!%2!',@prechar,@lock_scheme
-
-
select@table_seg="on'"+@table_seg+"'"
-
select@table_dll=@table_dll+@CRNW+@table_seg+@CRNW+'go'+@CRNW
-
-
if@prechar<>'$'begin
-
print'%1!%2!',@prechar,@table_seg
-
print'%1!go',@prechar
-
end
-
end
-
-
ifltrim(@prxytx)isnotnullor@sysstat2&1024=1024
-
gotook
-
-
ifcharindex('T',@indextg)>0begin
-
declare@part_numint,@partitionvarchar(255)
-
select@part_num=count(*)
-
fromsyspartitions
-
whereid=object_id(@tblname)
-
if@part_num<>0begin
-
select@partition='altertable'+@username+'.'+@table_name+'partition'+convert(varchar,@part_num)
-
select@table_dll=@table_dll+@CRNW+@partition
-
if@prechar<>'$'
-
print'%1!%2!',@prechar,@partition
-
end
-
end
-
-
--select@table_dllastable_dll
-
-------------------------------------------------------------------------------------
-
--检查其他索引
-
declare@idx_segvarchar(32)
-
ifcharindex('I',@indextg)>0orcharindex('J',@indextg)>0begin
-
ifexists(select1fromsysindexeswhereid=@obj_idandindid<>0and
-
(status2&2<>2orcharindex('P',@indextg)<=0andcharindex('J',@indextg)<=0))
-
-
begin
-
declarecur_idxcursorfor
-
selectname,indid,statusfromsysindexes
-
whereid=@obj_idandindid<>0and
-
(status2&2<>2orcharindex('P',@indextg)<=0andcharindex('J',@indextg)<=0)
-
--(status2&2<>2orcharindex('P',@indextg)<=0)
-
opencur_idx
-
fetchcur_idxinto@idx_name,@indid,@status
-
while@@sqlstatus=0
-
begin
-
-
if@indid=1
-
select@non_clu='clustered'
-
elseif@indid>1
-
begin
-
if@status&16=16
-
select@non_clu='clustered'
-
else
-
select@non_clu='nonclustered'
-
end
-
-
if@status&2=2
-
select@non_uni='unique'
-
else
-
select@non_uni=null
-
-
select@i=1,@keys=''
-
select@thiskey=index_col(@tblname,@indid,@i)
-
while@thiskey<>null
-
begin
-
if@i>1
-
begin
-
select@keys=@keys+","
-
end
-
-
ifltrim(@keys)isnull
-
select@keys=@thiskey
-
else
-
select@keys=@keys+@thiskey
-
-
select@sorder=index_colorder(@tblname,@indid,@i)
-
if@sorder="DESC"
-
select@keys=@keys+""+@sorder
-
-
select@i=@i+1
-
select@thiskey=index_col(@tblname,@indid,@i)
-
end
-
-
ifltrim(@index_seg)isnullbegin
-
select@idx_seg=s.name
-
fromsyssegmentss,sysindexesi
-
wheres.segment=i.segment
-
andi.id=object_id(@tblname)
-
andi.indid=@indid
-
if@@rowcount=0begin
-
print'索引%1!所在的段不存在',@idx_name
-
gotoerr
-
end
-
end
-
else
-
select@idx_seg=@index_seg
-
-
ifltrim(@keys)isnotnullbegin
-
declare@thisidxvarchar(500)
-
select@thisidx='create'+@non_uni
-
+@non_clu+'index'+@idx_name+'on'+@dbname+@username
-
+'.'+@table_name+"("+@keys+")on'"+@idx_seg+"'"
-
-
select@index_dll=@index_dll+@thisidx+@CRNW
-
if@prechar<>'$'
-
print'%1!%2!',@prechar,@thisidx
-
end
-
-
fetchcur_idxinto@idx_name,@indid,@status
-
end
-
-
ifltrim(@index_dll)isnotnullbegin
-
if@droptg<>'0'begin
-
select@index_dll=@index_dll+'go'+@CRNW
-
if@prechar<>'$'
-
print'%1!go',@prechar
-
end
-
end
-
-
select@table_dll=@table_dll+@CRNW+@index_dll
-
end
-
end
-
ok:
-
setnocountoff
-
return0
-
err:
-
setnocountoff
-
return-1
-
end
-
go
-
-
小结:不足之处当DDL脚本超过16384时,将被截断,此时需要通过ddlgen语法来生成
-
见我的blog:sybase
导出DDL语句以及ddlgen的描述
-
http://blog.csdn.net/xujinyang/article/details/6871003
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
`java`在这里扮演了工具开发的角色,开发者可以利用Java的强类型和丰富的库来构建一个自动化脚本,遍历所有表并生成建表语句。DbGenSqlUtil很可能是一个Java工具类,用于处理这个任务。它可能包含了连接数据库、执行...
在SYBASE中用于生当前数据库中所有表的建表语句的过程。 在系统备份的加上BCP,那是相当的好。
标题中的“sybase导出建表SQL工具”指的是一个专门针对Sybase数据库系统的应用程序,它的主要功能是帮助用户方便地导出数据库中的表结构定义,即建表SQL语句。在数据库管理中,建表SQL语句是创建数据库表结构的关键...
以下是一个示例脚本,用于遍历当前模型中的所有表格、字段和视图,并将其名称设置为备注: ```vbscript Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl ' 当前模型 mdl = ...
- **实时分析**:能够在交易过程中实时分析数据,为企业决策提供即时支持。 - **统一平台**:将数据仓库、数据湖和应用程序服务器功能集成到一个平台上。 - **广泛的应用集成**:支持多种SAP应用及第三方应用程序的...
### PowerDesigner基础知识与实践应用详解 #### 一、PowerDesigner简介...在实际应用过程中,应当注意遵循最佳实践,比如在建表语句中避免不必要的双引号使用,以及充分利用PowerDesigner提供的正向和反向工程等功能。
在 Oracle 数据库设计过程中,合理地规划和使用表空间对于提高数据库性能、优化磁盘空间使用率至关重要。例如,可以将经常访问的数据放在高性能磁盘上的表空间中,而将不常用的数据存放在较低性能的磁盘上,以此来...
- **Copy出建表SQL**:通过SQL语句复制表的结构,创建新的表定义。 - **使用PowerDesigner反向工程导出SQL**:PowerDesigner是一款强大的数据库设计工具,可帮助用户从现有数据库中生成建模脚本,便于在新环境中...
PowerDesigner12.5 直接从 DB 中导出 pdm 文件 PowerDesigner12.5 是一款功能强大且广泛应用的...使用 PowerDesigner12.5 直接从 DB 中导出 pdm 文件可以快速、方便地生成数据库结构图,并简化数据库设计和管理过程。
根据EXCEL中的表结构,生成建表语句SQL文。 6。多用户使用该软件时,可以随时记录某个用户对数据库的操作。 7。可以为进行压力测试,自动生成数据。 8。导出表结构,根据表结构和数据库中的表结构进行差分。 9。...
解决 Oracle 生成的 SQL 创建语句中的双引号问题 在使用 PowerDesigner 导出 Oracle 数据库的建表 SQL 时,默认情况下,PowerDesigner 会为表名和字段名添加双引号,这可能会给数据库操作带来不便。要解决这个问题...
在生成建表脚本时,可以选择不进行检查,或者修改 C:\Program Files\Sybase\PowerDesigner Trial 11\Resource Files\DBMS 中的设置。 本文总结了 PowerDesigner 的一些常用设置和技巧,希望能够帮助读者更好地使用 ...
通过对Sybase ASE15中的系统参数配置、数据库设计及查询计划的深入了解与优化,可以显著提升数据库的运行效率和响应速度。这些技术不仅限于Sybase ASE15,很多原则也适用于其他数据库管理系统。实践中应综合考虑各种...
在一个SELECT 语句中使用多个表119 正确地找到列123 等值联合124 不等值联合129 外部联合与内部联合130 表的自我联合132 总结134 问与答134 校练场134 练习135 第七天子查询内嵌的SQL 子句136 目标136 建立一个子...
PowerDesigner从最初的单一数据库设计工具演化为一个全方位的建模工具软件,涵盖了管理信息系统设计的全过程,包括数据流程图、概念数据模型、物理数据模型的制作,以及生成建表程序、存储过程、触发器框架等。...
一、去掉 Oracle 生成的 SQL 创建语句中的双引号 在 PowerDesign 里,导出 Oracle 数据库的建表 SQL 时,默认会给表名和字段名加上双引号。解决方法是设置 Database 菜单,然后点击 Edit Current DBMS 菜单,再依次...
生成建表脚本是将PDM模型转化为数据库创建语句,以便在数据库中实施。在PDM中,选择“数据库”>“生成”>“SQL脚本”,定制脚本选项,如表空间、存储过程等。 5. PDM生成REPORT REPORT功能用于创建模型报告,展示...
- 当你在SQL语句中遇到表名和字段名被引号包围导致大小写敏感问题时,可以在`Tools`菜单下选择`Model Options`,然后在`Naming Convention`选项中,调整`Name`和`Code`的`Character Case`设置为`Uppercase`或`...