MSSQLSERVER只能得到存储过程的 创建语句,方法如下:
sp_helptextprocedureName
但是往往我们需要 得到表的 创建语句,比如说在升级的时候判断某个表是否已经改变,或者已经有一个表存在,但不知道它的 创建语句是什么,字段有没有约束,有没有主键,创建了哪些索引等等.下面我给出一个存储过程,供读者参考.
该存储过程可以得到你想得到的所有的表的 创建语句,包括和表有关的索引的 创建语句.
SQLSERVER2000下的代码
createprocedureSP_GET_TABLE_INFO
@ObjNamevarchar(128) /*Thetabletogeneratesqlscript*/
as
declare@Scriptvarchar(255)
declare@ColNamevarchar(30)
declare@ColID TinyInt
declare@UserTypesmallint
declare@TypeNamesysname
declare@Length TinyInt
declare@Prec TinyInt
declare@Scale TinyInt
declare@Status TinyInt
declare@cDefaultint
declare@DefaultIDTinyInt
declare@Const_Keyvarchar(255)
declare@IndID SmallInt
declare@IndStatusInt
declare@Index_Keyvarchar(255)
declare@DBName varchar(30)
declare@strPri_Keyvarchar(255)
/*
** Checktoseethethetableexistsandinitialize@objid.
*/
ifnotExists(Selectnamefromsysobjectswherename=@ObjName)
begin
select@DBName=db_name()
raiserror(15009,-1,-1,@ObjName,@DBName)
return(1)
end
createtable#spscript
(
id intIDENTITYnotnull,
ScriptVarchar(255)NOTNULL,
LastLinetinyint
)
declareCursor_ColumnINSENSITIVECURSOR
forSelecta.name,a.ColID,a.usertype,b.name,a.length,a.prec,a.scale,a.Status,a.cDefault,
casea.cdefaultwhen0then''else(selectc.Textfromsyscommentscwherea.cdefault=c.id)endconst_key
fromsyscolumnsa,systypesbwhereobject_name(a.id)=@ObjName
anda.usertype=b.usertypeorderbya.ColID
setnocounton
Select@Script='Createtable'+@ObjName+'('
Insertinto#spscriptvalues(@Script,0)
/*Getcolumninformation*/
openCursor_Column
fetchnextfromCursor_Columninto@ColName,@ColID,@UserType,@TypeName,@Length,@Prec,@Scale,
@Status,@cDefault,@Const_Key
Select@Script=''
while(@@FETCH_STATUS<>-1)
begin
if(@@FETCH_STATUS<>-2)
begin
Select@Script=@ColName+''+@TypeName
if@UserTypein(1,2,3,4)
Select@Script=@Script+'('+Convert(char(3),@Length)+')'
elseif@UserTypein(24)
Select@Script=@Script+'('+Convert(char(3),@Prec)+','
+Convert(char(3),@Scale)+')'
1