create procedure up_getTableStruct 
@v_tableName varchar(256) 
as 
declare @i_objectId int, -- 對象id 
@i_indId smallint, -- 索引id 
@v_pkInfo varchar(100), -- 主鍵信息 
@v_clusteredInfo varchar(20), -- clustered信息 
@v_pkCol varchar(100), -- 主鍵字段 
@v_key varchar(50), 
@i_i smallint 
set @i_objectId = object_id(@v_tableName) 
if @i_objectId is null -- 判斷對象是否存在 
begin 
print 'The object not exists' 
return 
end 
if OBJECTPROPERTY(@i_objectId,'IsTable') <> 1 -- 判斷對象是否是table 
begin 
print 'The object is not table' 
return 
end create table #temp1 

i_id int identity, 
v_desc varchar(200) 
) insert into #temp1(v_desc) 
values('create table '+@v_tableName+'(') -- insert into #temp1(v_desc) -- 將表的字段信息存入臨時表 
select a.name+space(4)+b.name+ 
case when b.xtype in (167,175,231,239) then '('+cast(a.length as varchar)+')' 
when b.xtype in (106,108) then '('+cast(a.xprec as varchar)+','+cast(a.xscale as varchar)+')' 
else '' end+space(4)+ 
case when (a.colstat & 1 = 1) then 'identity('+cast(ident_seed(@v_tableName) as varchar)+',' + 
cast(ident_incr(@v_tableName) as varchar)+')' else '' end +space(4)+ 
case a.isnullable when 0 then 'not null' else 'null' end+'|' 
from syscolumns a,systypes b 
where a.id = @i_objectId and a.xtype = b.xusertype 
order by a.colid create procedure 名
@aa varchar(10)
as
begin
  select a.id 编号,a.name 名称,b.id,b.name from table1 a join table2 b on a.id=b.id where 
endif exists(select 1 from sysobjects where parent_obj = @i_objectId and xtype = 'PK') -- 如果存在主鍵 
begin 
select @v_pkInfo = b.name,@i_indId = indid, -- 得到主鍵名,id及是否clustered信息 
@v_clusteredInfo = (case when (a.status & 16)=16 then 'clustered' else 'nonclustered' end ) 
from sysindexes a,sysobjects b 
where a.id = b.parent_obj and a.name = b.name and b.xtype = 'PK' and b.parent_obj = @i_objectId select @v_pkCol = index_col(@v_tableName, @i_indId, 1), @i_i = 2 -- 得到主鍵的第1個字段名 
select @v_key = index_col(@v_tableName, @i_indId, @i_i) -- 得到主鍵的第2個字段名 
while (@v_key is not null) 
begin 
select @v_pkCol = @v_pkCol + ',' + @v_key, @i_i = @i_i + 1 
select @v_key = index_col(@v_tableName, @i_indId, @i_i) -- 得到主鍵的第@i_i個字段名 
end -- 組合成主鍵信息 
set @v_pkInfo = 'constraint '+@v_pkInfo+' primary key '+@v_clusteredInfo+'('+@v_pkCol+')' 
insert into #temp1(v_desc) values(@v_pkInfo) -- 將主鍵信息插入臨時表 
end 
else 
begin 
select @i_i = count(1) from #temp1 
-- 如果沒有主鍵,那麼將最後一筆紀錄的'|'去掉 
update #temp1 set v_desc = replace(v_desc,'|','') where i_id = @i_i 
end insert into #temp1(v_desc) values(')') -- 
update #temp1 set v_desc = replace(v_desc,'|',',') select v_desc from #temp1 order by i_id drop table #temp1

解决方案 »

  1.   

    从DataBase中导出该table的schema,再create不就行了??
      

  2.   

    采用SQL DMO,可以很方便的做到。Dim oSQL As SQLDMO.SQLServer
        Dim oTable As SQLDMO.Table
        Dim oView As SQLDMO.View
        
        Set oSQL = New SQLServer
        oSQL.Connect "localhost", "sa", ""
        Open "c:\1.sql" For Output As #1
        '导出建表脚本
        For Each oTable In oSQL.Databases("haichen").Tables
            If (oTable.Attributes And SQLDMOTabAtt_SystemObject) <> SQLDMOTabAtt_SystemObject Then
                Print #1, oTable.Script(SQLDMOScript_Default, , , SQLDMOScript2_Default)
            End If
        Next
        
        '导出建视图脚本
        For Each oView In oSQL.Databases("haichen").Views
            If Not oView.SystemObject Then
                Print #1, oView.Script(SQLDMOScript_Default, , SQLDMOScript2_Default)
            End If
        Next
        
          
        
        Close #1