根據表格獲取字段名稱及類型

declare @TB_NM varchar(40)
declare @FD_NM varchar(40),@FD_Type varchar(20),@FD_Len varchar(20)
declare @FDstr varchar(8000),@FDvalue varchar(8000),@lineno int
declare @style int --功能選擇項
                                    /*--1:隻獲取表格字段名稱及類型字符串(方便變量-格式:@xx1 FieldType,@xx2 FieldType)
                      --2:隻獲取賦值後的字段類型字符串(方便變量初始化-格式:@xx1='',@xx2=0)  
                    --3:既獲取1又獲取2
                    --4:隻獲取字段名(方便Insert時-Insert into TB_NM(xx1,xx2))
                                     --51:隻獲取表格字段名稱
                                  -->(格式: xx1
                                                    xx2)
                                     --52:隻獲取表格字段類型
                                           -->(格式: Type1
                                                            Type2)
                                        --6:為CreateTB
                                            -->(格式:xx1 type1,xx2 type2)                                                                
                   */                  
                                                     
set @TB_NM='STmo_AUSMoHdr'  --設置要獲取字段的表格名稱
set @style=4  --設置功能選項

select @FD_NM='',@FD_Type='',@FD_Len=0,@FDstr=' ',@FDvalue=' ',@lineno=0

if not Exists(select top 1 * from sysobjects where name=@TB_NM)
begin
  print '該表格在當前數據庫中不存在'
  return
end
else
begin
  declare mycur cursor for
    select  a.name 字段名,b.name 字段類型,a.length 長度
      from  syscolumns a join
            (select * from systypes where name<>'sysname') b
            on a.xtype=b.xtype join
            sysobjects c on a.id=c.id
     where  c.name=@TB_NM
    --order by a.name

  open mycur
  fetch next from mycur into @FD_NM,@FD_Type,@FD_Len
  while(@@Fetch_Status=0)
  begin
    if(@style=1)or(@style=3)
    begin
      set @FDstr=@FDstr+'@'+@FD_NM+' '+@FD_Type
      if(@FD_Type='char')or(@FD_Type='varchar')or(@FD_Type='nvarchar')or(@FD_Type='decimal')or(@FD_Type='uniqueidentifier')
                set @FDstr=@FDstr+'('+@FD_Len+')'+','
      else if (@FD_Type='int')or(@FD_Type='float')or(@FD_Type='decimal')or(@FD_Type='datetime')or(@FD_Type='smalldatetime')or(@FD_Type='real')
        set @FDstr=@FDstr+','
    end
    --
    if(@style=2)or(@style=3)
    begin
      set @FDvalue=@FDvalue+'@'+@FD_NM+'='
      if(@FD_Type='char')or(@FD_Type='varchar')or(@FD_Type='nvarchar')
                set @FDvalue=@FDvalue+''''+''''+','
      else if(@FD_Type='int')or(@FD_Type='float')or(@FD_Type='decimal')or(@FD_Type='smalldatetime')or(@FD_Type='real')or(@FD_Type='uniqueidentifier')
        set @FDvalue=@FDvalue+'0,'
      else if(@FD_Type='datetime')
        set @FDvalue=@FDvalue+''''+'1900-01-01 00:00:00'+''''+','
    end   
    --
    if(@style=4)--功能選擇項為4時,用FDvalue取字段值
    begin
      set @FDvalue=@FDvalue+@FD_NM+','
    end   
    --
    if(@style=51)
    begin
      set @FDvalue=@FDvalue+@FD_NM+char(13)+char(10)
    end
    --
    if(@style=52)
    begin
      set @FDstr=@FDstr+@FD_Type
      if(@FD_Type='char')or(@FD_Type='varchar')or(@FD_Type='nvarchar')or(@FD_Type='decimal')
                set @FDstr=@FDstr+'('+@FD_Len+')'+char(13)+char(10)
      else if (@FD_Type='int')or(@FD_Type='float')or(@FD_Type='decimal')or(@FD_Type='datetime')or
                            (@FD_Type='smalldatetime')or(@FD_Type='real')or(@FD_Type='uniqueidentifier')
        set @FDstr=@FDstr+char(13)+char(10)
    end
        --
        if(@style=6)
        begin
            set @FDstr=@FDstr+@FD_NM+' '+@FD_Type
            if(@FD_Type='char')or(@FD_Type='varchar')or(@FD_Type='nvarchar')or(@FD_Type='decimal')
                set @FDstr=@FDstr+'('+@FD_Len+')'+','
      else if (@FD_Type='int')or(@FD_Type='float')or(@FD_Type='decimal')or(@FD_Type='datetime')or
                            (@FD_Type='real')or(@FD_Type='smalldatetime')or(@FD_Type='uniqueidentifier')or(@FD_Type='numeric')or
                            (@FD_Type='bit')
        set @FDstr=@FDstr+','
        end        
    
    set @lineno=@lineno+1
    if(@lineno%5=0)and(@style<>51)and(@style<>52)and(@style<>6)
    begin
      set @FDstr=@FDstr+char(13)+char(10)+'        '  
      if(@style=3) set @FDvalue=@FDvalue+char(13)+char(10)+'        '
      else set @FDvalue=@FDvalue+char(13)+char(10)+'                             '
    end
        if(@lineno%10=0)and(@style=6)
        begin
            set @FDstr=@FDstr+char(13)+char(10)
        end
    fetch next from mycur into @FD_NM,@FD_Type,@FD_Len
  end --end while     
  close mycur
  Deallocate mycur
 
  if(@style<>51)and(@style<>52)
  begin
    --去除字符串後的逗號
    set @lineno=0
    set @lineno=len(@FDstr)-1
        if @lineno>0
    set @FDstr=left(@FDstr,@lineno)
    set @lineno=0
    set @lineno=len(@FDvalue)-1
        if @lineno>0
        set @FDvalue=left(@FDvalue,@lineno)  
    --客制:檢測字符串後是否還有逗號(@TB_NM='STmo_USAMoHdr'時逗號老去不掉,所以加上)
    if right(@FDstr,1)=',' set @FDstr=left(@FDstr,len(@FDstr)-1)
    if right(@FDvalue,1)=',' set @FDvalue=left(@FDvalue,len(@FDvalue)-1)
  end
 
  if(@style=1)or(@style=3)or(@style=52)or(@style=6)
  begin
    print @FDstr
    if(@style=3) print char(13)+char(10)
  end
  if (@style=2)or(@style=3)or(@style=4)or(@style=51) print @FDvalue
end


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章