MSSQLSERVER中如何得到表的创建语句


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

你可能感兴趣的:(数据库,存储,table)