如何在SQL SERVER中获取一个DBF表的字段类型

fuction 2003-11-27 01:32:33
请问如何在SQL SERVER 中通过语句获取DBF表的字段类型,谢谢!
...全文
137 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuction 2003-11-28
  • 打赏
  • 举报
回复
to zjcxc(邹建) 、pengdali(大力 V3.0) :
谢谢两位,我也想过用中间表或临时表,可是将 DBF 数据库导入到 SQL SERVER 的时候有些类型会出错,比如 DATETIME 类型。所以我想在导入之前就先获得字段的类型,然后通过DTS 编程将DATETIME 转成 VARCHAR。不知道两位有没有更好的方法让我在数据导入之前就能获得字段的类型及长度。谢谢!
pengdali 2003-11-27
  • 打赏
  • 举报
回复
什么都不知道的话:


select * into 中间表 from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')

select a.name 列名,b.name 类型,a.length 长度, a.isnullable 是否为空 from syscolumns a, systypes b,sysobjects d where a.xtype=b.xusertype and a.id=d.id and d.xtype='U' and d.name='中间表'

drop table 中间表
pengdali 2003-11-27
  • 打赏
  • 举报
回复
对不起少写了:

select top 1 SQL_VARIANT_PROPERTY(列1,'BaseType'),SQL_VARIANT_PROPERTY(列2,'BaseType'),SQL_VARIANT_PROPERTY(列3,'BaseType') from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
zjcxc 元老 2003-11-27
  • 打赏
  • 举报
回复
--那就可以用下面的这个:

--根据Dbase表生成临时表
select * into #tb from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;DATABASE=C:\','select * from [地区资料.dbf] where 1=2')

--根据临时表查询表结构
SELECT 字段序号=a.colorder,
字段名=a.name,
标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
类型=b.name,
占用字节数=a.length,
长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),
小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
允许空=case when a.isnullable=1 then '√'else '' end
FROM tempdb..syscolumns a
left join tempdb..systypes b on a.xtype=b.xusertype
where object_id('tempdb..#tb')=id
order by a.id,a.colorder

--完成后删除临时表
drop table #tb
fuction 2003-11-27
  • 打赏
  • 举报
回复
to zjcxc(邹建) :
如果我在不知道表中字段名的情况下该怎样获取表的字段名、类型以及长度
zjcxc 元老 2003-11-27
  • 打赏
  • 举报
回复
SQL_VARIANT_PROPERTY
返回有关 sql_variant 值的基本数据类型和其它信息。

语法
SQL_VARIANT_PROPERTY ( expression, property )

参数
expression
是 sql_variant 类型的表达式。

property
包含将为其提供信息的 sql_variant 属性名称。property 是 varchar(128),可以是下列任何值。
值 描述 返回的 sql_variant 基本类型
BaseType SQL Server 数据类型,如:
char
int
money
nchar
ntext
numeric
nvarchar
real
smalldatetime
smallint
smallmoney
text
timestamp
tinyint
uniqueidentifier
varbinary
varchar
sysname
无效的输入 = NULL

Precision 数字基本数据类型的位数:
datetime = 23
smalldatetime = 16
float = 53
real = 24
decimal (p,s) and numeric (p,s) = p
money = 19
smallmoney = 10
int = 10
smallint = 5
tinyint = 3
bit = 1
all other types = 0
int
无效的输入 = NULL

Scale 数字基本数据类型小数点右边的位数:
decimal (p,s) 和 numeric (p,s) = s
money 和 smallmoney = 4
datetime = 3
所有其它类型 = 0
int
无效的输入 = NULL

TotalBytes 要包含值的元数据和数据所需的字节数。该信息在检查 sql_variant 列中数据的最大一侧时很有用。如果该值大于 900,索引创建将失败。 int
无效的输入 = NULL

Collation 代表特定 sql_variant 值的排序规则。 sysname
无效的输入 = NULL

MaxLength 最大数据类型长度(以字节为单位)。例如,nvarchar(50) 的 MaxLength 是 100,int 的 MaxLength 是 4。 int
无效的输入 = NULL

zjcxc 元老 2003-11-27
  • 打赏
  • 举报
回复
select SQL_VARIANT_PROPERTY(地区编号,'BaseType') from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;DATABASE=C:\','select * from [地区资料.dbf]')

showmetoyou 2003-11-27
  • 打赏
  • 举报
回复
sp_columns_ex [ @table_server = ] 'table_server'
[ , [ @table_name = ] 'table_name' ]
[ , [ @table_schema = ] 'table_schema' ]
[ , [ @table_catalog = ] 'table_catalog' ]
[ , [ @column_name = ] 'column' ]
[ , [ @ODBCVer = ] 'ODBCVer' ]
示例
下面的示例返回 titles 表的 title_id 列的数据类型。

USE master
EXEC sp_columns_ex 'LONDON1', 'titles', 'dbo', 'pubs',
'title_id'

realgz 2003-11-27
  • 打赏
  • 举报
回复
要去查查openrowset怎么用了。。
fuction 2003-11-27
  • 打赏
  • 举报
回复
to pengdali(大力 V3.0) :
SQL_VARIANT_PROPERTY 的参数好象不够,系统提示sql_variant_property 函数要求有 2 个参数。
还有,如果我在不知道表中字段名的情况下该怎样获取表的字段名、类型以及长度
realgz 2003-11-27
  • 打赏
  • 举报
回复
又学了一招。
pengdali 2003-11-27
  • 打赏
  • 举报
回复
select top 1 SQL_VARIANT_PROPERTY(列1),SQL_VARIANT_PROPERTY(列2),SQL_VARIANT_PROPERTY(列3) from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
realgz 2003-11-27
  • 打赏
  • 举报
回复
连接服务器?
exec master..sp_columns_ex @table_server=@server,@table_name =@table

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧