连接服务器?
exec master..sp_columns_ex @table_server=@server,@table_name =@table

解决方案 »

  1.   

    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]')
      

  2.   

    to  pengdali(大力 V3.0) :
      SQL_VARIANT_PROPERTY 的参数好象不够,系统提示sql_variant_property 函数要求有 2 个参数。
      还有,如果我在不知道表中字段名的情况下该怎样获取表的字段名、类型以及长度
      

  3.   

    要去查查openrowset怎么用了。。
      

  4.   

    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'
      

  5.   

    select SQL_VARIANT_PROPERTY(地区编号,'BaseType') from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    ,'dBase IV;DATABASE=C:\','select * from [地区资料.dbf]')
      

  6.   

    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
     
      

  7.   

    to zjcxc(邹建) :
        如果我在不知道表中字段名的情况下该怎样获取表的字段名、类型以及长度
      

  8.   

    --那就可以用下面的这个:--根据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
      

  9.   

    对不起少写了: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]')
      

  10.   

    什么都不知道的话:
    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 中间表
      

  11.   

    to zjcxc(邹建) 、pengdali(大力 V3.0) :
        谢谢两位,我也想过用中间表或临时表,可是将 DBF 数据库导入到 SQL SERVER 的时候有些类型会出错,比如 DATETIME 类型。所以我想在导入之前就先获得字段的类型,然后通过DTS 编程将DATETIME 转成 VARCHAR。不知道两位有没有更好的方法让我在数据导入之前就能获得字段的类型及长度。谢谢!