根據表格獲取字段名稱及類型
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
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.