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

fuction 2003-11-27 01:32:33
请问如何在SQL SERVER 中通过语句获取DBF表的字段类型,谢谢!
...全文
180 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
代码下载地址: https://pan.quark.cn/s/30aac9886e4b 【汉字录入能力评估平台】是国邮政为了增强员工汉字输入的效率与精确度而研发的一款专业化训练与考核平台。该平台主要面向国邮政服务窗口工作人员的岗前培训,致力于保障工作人员在实际操作能够迅速且精准地处理各类文字资料,进而优化邮政服务的效能与品质。文字录入作为邮政作业的核心技能,在数字化时代背景下尤为重要,邮政柜员需处理大量电子化文档及电子邮件,卓越的文字输入技巧直接关联到业务流程的连贯性。该平台整合了训练与测试两大核心功能,为用户构建了一个全方位提升汉字输入技巧的环境。平台的训练模块可能具备以下特征:1. **入门级训练**:提供不同难度的汉字及词汇组合,引导用户从基础开始,逐步强化录入速度。2. **情境化模拟**:重现真实的邮政作业场景,让实践者于近似现实的工作状态下进行练习,提升环境适应力。3. **速录强化**:运用计时及计字量机制,要求用户在限定时段内尽可能多地完成汉字输入,以锻炼高速录入能力。4. **偏差修正**:系统将实时识别并反馈用户的输入偏差,协助用户纠正不良输入习惯,提升正确度。5. **定制化配置**:或许允许用户依据个人需求调整训练内容与难度,实现个性化学习路径。测试模块则可能包含以下要素:1. **标准化测试**:确立统一的标准,例如规定时间内必须完成的汉字数量或必须达到的准确率,以此衡量用户汉字输入的熟练程度。2. **现追踪**:记载每次测试的现,形成历史数据,使用户能够追踪自身成长轨迹。3. **绩效对比**:或许设有内部绩效排行机制,让用户了解自身在团队的相对位置,激发竞争心态。4. **资格认证**:对于达到特定标准的用户,平台可...
内容概要:本文围绕售电市场环境下电力用户选择售电公司的行为展开深入研究,通过构建数学模型与博弈分析框架,系统探讨用户在不同电价机制、服务质量、合同条款及风险偏好等因素影响下的决策行为与选择偏好。研究采用Matlab作为仿真平台,结合实证数据或设定典型场景,运用主从博弈、多智能体模拟、优化算法等方法,模拟电力市场多方主体之间的交互过程,重点分析售电公司定价策略、激励机制与用户响应之间的动态关系,揭示市场主体间的行为演化规律与均衡机制,旨在为电力市场化改革的机制设计、市场监管与政策制定提供理论支撑与量化依据。; 适合人群:具备一定电力系统基础知识、微观经济学或博弈论理论背景,熟悉Matlab编程与数值仿真的科研人员、高校研究生及能源领域相关从业者。; 使用场景及目标【EI复现】售电市场环境下电力用户选择售电公司行为研究(Matlab代码实现):①掌握电力市场用户购电行为建模与效用函数设计方法;②熟练运用Matlab实现博弈模型构建、多智能体仿真与市场均衡求解;③深入理解售电侧市场竞争机制,为售电公司制定差异化营销策略、政府设计用户激励政策及提升市场运营效率提供决策支持。; 阅读建议:此资源以Matlab代码实现为核心,建议读者结合文档说明逐步运行并调试代码,通过调整模型参数(如电价水平、服务权重、用户敏感度等)观察仿真结果的变化,深入理解模型内在逻辑与行为机理;同时鼓励在此基础上拓展至多类型用户群体、引入不确定性因素或结合实际数据进行案例验证,以增强研究的实用性与创新性。

34,876

社区成员

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

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