用SQL语句查询表的名称或表的某个字段

时间:2021-12-21 14:07:59
用SQL语句查询“表”的名称或“表”的某个“字段”,而不是查询“字段”中的“内容”,只需要查询该数据库是否有这个“表”或查询某个“表”中的任意“字段”

15 个解决方案

#1


???
通过下面SQL得到当前数据库中表名
select name from sysobjects where xtype='u'
当然存储过程exec sp_tables也能得到,只要比系统表去掉就可以了
取字段的根据表名tablename

'select name from syscolumns where id=(select id from sysobjects where name='+tablename+')'
当然存储过程EXEC sp_columns @table_name = 'tablename'也能得到了

#2


Oracle可以, MSSQL应该也可以, 我不能确定, 我看看再说:)

#3


啊 原来有人回答了啊 好啊, 我也知道了:)

#4


up

#5


如果type=‘u’的话还会将表dtproperties提取出来,这个表是干什么用的亚

#6


这个表是全动态的~添加一些数据的时候,需要动态的添加些表,或者表中的字段~我看看这个能不能用~

#7


还是没搞明白啊~
我们利用SQL语句: select * from ChouYFD.dbo.sysobjects where xtype='U' 这样就可以列出库名称是:ChouYFD中所有的表名.
ChouYFD.dbo这个表示所用数据库.sysobjects 表示数据库中某个表名,但是查询表怎么查询啊?

#8


你可以根据错误代码来判断是否有某表名或者是否有某字段存在

#9


declare @tablename varchar(80)
set @tablename='.....'  --------你要查询的表名
if exists(select * from sysobjects where xtype='U' and name=@tablename)
  print '存在表:'+@tablename
else
  print '不存在表:'+@tablename

#10


在问一下,是不是这些语句只能在MS_SQL数据库中用吗?ACCESS的用不成吗?
我在ACCESS里用的呢?他们告诉我不能查找!

#11


参考:

http://www.access911.net/75FAB01E17DC.htm

http://www.access911.net/71FAB71E12DC.htm

#12


没搞明白我不是用ADO。NET而不是用的通用的那种晕了~

#13


如果是sqlserver2000,就查sysobjects这个表就可以了。
oracle还没有研究,好象是有个什么syscat的表,做类似作用。

如果是查列名,可以读入表后查询元数据。

#14



    '//
    '//函数名:GetSqlDbTabFldAttr
    '//功能:取数据表下所有字段的属性.(直接从数据库的系统表取值,注意其 数据类型代号 与 VB.NET 中的有不一至性.)
    '//返回值:DBFiedArrtr 结构数组.
    '//          2004/11/29 MSTOP


    Public Function GetSqlDbTabFldAttr(ByRef SqlConn As SqlClient.SqlConnection, ByVal DbTabName As String) As PublicMod.DBFiedArrtr()
        Dim DatRead As SqlClient.SqlDataReader
        Dim StrSql As String
        Dim RevVal() As PublicMod.DBFiedArrtr
        Dim ID As Integer
        Dim I As Integer


        '//直接从数据库的系统表取值,注意其 数据类型代号 与VB.NET中的有不一至性.
        '//SQL字段类型及其代号:
        'Image(34) text(35)  uniqueidentifier(36)  tinyint(48)   smallint(52)    Int(56)
        'smalldatetime(58)   real(59)   money(60)  DateTime(61)  float(62)  sql_variant(98)
        'ntext(99)  bit(104)  decimal(106)  numeric(108)  smallmoney(122)  bigint(127)
        'varbinary(165)  varchar(167) binary(173)  char(175)  timestamp(189)
        'nvarchar(231)   nchar(239)  sysname(256)

        '//SQL返回字段说明:
        'TableName 表名,  TablerRem 表说明,  FiledNo 字段序号, FiledName 字段名,FiledTypeCode 类型代号,FiledType 类型,ID 标识
        'ImpBytes 占用的字节数  ,DatLen 定义长度,Decdig 小数位数,IsNull 是否可为空,DefValue 默认值,'FiledRem 字段说明

        StrSql = "SELECT " & _
                "[TableName]=case when a.colorder=1 then d.name else '' end," & _
                "[TablerRem]=case when a.colorder=1 then isnull(f.value,'') else '' end," & _
                "[FiledNo]=a.colorder," & _
                "[FiledName]=a.name," & _
                "[ID]=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '1'else '' end," & _
                "[IsPKey]=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (" & _
                                       "SELECT name FROM sysindexes WHERE indid in(" & _
                                       "SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid" & _
                                       "))) then '1' else '' end," & _
                "[FiledTypeCode]=b.xusertype," & _
                "[FiledType]=b.name," & _
                "[ImpBytes]=a.length," & _
                "[DatLen]=COLUMNPROPERTY(a.id,a.name,'PRECISION')," & _
                "[Decdig]=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0)," & _
                "[IsNull]=case when a.isnullable=1 then '1'else '' end," & _
                "[DefValue]=isnull(e.text,'')," & _
                "[FiledRem]=isnull(g.[value],'') " & _
                " FROM syscolumns a " & _
                " left join systypes b on a.xusertype=b.xusertype " & _
                " inner join sysobjects d on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties' " & _
                " left join syscomments e on a.cdefault=e.id " & _
                " left join sysproperties g on a.id=g.id and a.colid=g.smallid  " & _
                " left join sysproperties f on d.id=f.id and f.smallid=0 " & _
                " where d.name='" & DbTabName & "'" & _
                " order by a.id,a.colorder"

        DatRead = SqlReader(SqlConn, StrSql)

        ID = 0
        While DatRead.Read
            ReDim Preserve RevVal(ID)

            '//直接从数据库系统表取值.
            RevVal(ID).FieldActSize = 0                                                 '//实际数据长度
            RevVal(ID).FieldDefSize = CTeyeData.ToStr(DatRead.Item("DatLen"))           '//定义的数据长度
            RevVal(ID).FieldIsNull = CTeyeData.ToStr(DatRead.Item("IsNull"))            '//是否可为NULL
            RevVal(ID).FieldName = CTeyeData.ToStr(DatRead.Item("FiledName"))           '//字段名
            RevVal(ID).FieldType = CTeyeData.ToStr(DatRead.Item("FiledType"))           '//字段类型
            RevVal(ID).FieldTypeCode = CTeyeData.ToStr(DatRead.Item("FiledTypeCode"))   '//字段类型代号
            ID += 1
        End While
        DatRead.Close()
        Return RevVal

    End Function

#15


ding.........

#1


???
通过下面SQL得到当前数据库中表名
select name from sysobjects where xtype='u'
当然存储过程exec sp_tables也能得到,只要比系统表去掉就可以了
取字段的根据表名tablename

'select name from syscolumns where id=(select id from sysobjects where name='+tablename+')'
当然存储过程EXEC sp_columns @table_name = 'tablename'也能得到了

#2


Oracle可以, MSSQL应该也可以, 我不能确定, 我看看再说:)

#3


啊 原来有人回答了啊 好啊, 我也知道了:)

#4


up

#5


如果type=‘u’的话还会将表dtproperties提取出来,这个表是干什么用的亚

#6


这个表是全动态的~添加一些数据的时候,需要动态的添加些表,或者表中的字段~我看看这个能不能用~

#7


还是没搞明白啊~
我们利用SQL语句: select * from ChouYFD.dbo.sysobjects where xtype='U' 这样就可以列出库名称是:ChouYFD中所有的表名.
ChouYFD.dbo这个表示所用数据库.sysobjects 表示数据库中某个表名,但是查询表怎么查询啊?

#8


你可以根据错误代码来判断是否有某表名或者是否有某字段存在

#9


declare @tablename varchar(80)
set @tablename='.....'  --------你要查询的表名
if exists(select * from sysobjects where xtype='U' and name=@tablename)
  print '存在表:'+@tablename
else
  print '不存在表:'+@tablename

#10


在问一下,是不是这些语句只能在MS_SQL数据库中用吗?ACCESS的用不成吗?
我在ACCESS里用的呢?他们告诉我不能查找!

#11


参考:

http://www.access911.net/75FAB01E17DC.htm

http://www.access911.net/71FAB71E12DC.htm

#12


没搞明白我不是用ADO。NET而不是用的通用的那种晕了~

#13


如果是sqlserver2000,就查sysobjects这个表就可以了。
oracle还没有研究,好象是有个什么syscat的表,做类似作用。

如果是查列名,可以读入表后查询元数据。

#14



    '//
    '//函数名:GetSqlDbTabFldAttr
    '//功能:取数据表下所有字段的属性.(直接从数据库的系统表取值,注意其 数据类型代号 与 VB.NET 中的有不一至性.)
    '//返回值:DBFiedArrtr 结构数组.
    '//          2004/11/29 MSTOP


    Public Function GetSqlDbTabFldAttr(ByRef SqlConn As SqlClient.SqlConnection, ByVal DbTabName As String) As PublicMod.DBFiedArrtr()
        Dim DatRead As SqlClient.SqlDataReader
        Dim StrSql As String
        Dim RevVal() As PublicMod.DBFiedArrtr
        Dim ID As Integer
        Dim I As Integer


        '//直接从数据库的系统表取值,注意其 数据类型代号 与VB.NET中的有不一至性.
        '//SQL字段类型及其代号:
        'Image(34) text(35)  uniqueidentifier(36)  tinyint(48)   smallint(52)    Int(56)
        'smalldatetime(58)   real(59)   money(60)  DateTime(61)  float(62)  sql_variant(98)
        'ntext(99)  bit(104)  decimal(106)  numeric(108)  smallmoney(122)  bigint(127)
        'varbinary(165)  varchar(167) binary(173)  char(175)  timestamp(189)
        'nvarchar(231)   nchar(239)  sysname(256)

        '//SQL返回字段说明:
        'TableName 表名,  TablerRem 表说明,  FiledNo 字段序号, FiledName 字段名,FiledTypeCode 类型代号,FiledType 类型,ID 标识
        'ImpBytes 占用的字节数  ,DatLen 定义长度,Decdig 小数位数,IsNull 是否可为空,DefValue 默认值,'FiledRem 字段说明

        StrSql = "SELECT " & _
                "[TableName]=case when a.colorder=1 then d.name else '' end," & _
                "[TablerRem]=case when a.colorder=1 then isnull(f.value,'') else '' end," & _
                "[FiledNo]=a.colorder," & _
                "[FiledName]=a.name," & _
                "[ID]=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '1'else '' end," & _
                "[IsPKey]=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (" & _
                                       "SELECT name FROM sysindexes WHERE indid in(" & _
                                       "SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid" & _
                                       "))) then '1' else '' end," & _
                "[FiledTypeCode]=b.xusertype," & _
                "[FiledType]=b.name," & _
                "[ImpBytes]=a.length," & _
                "[DatLen]=COLUMNPROPERTY(a.id,a.name,'PRECISION')," & _
                "[Decdig]=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0)," & _
                "[IsNull]=case when a.isnullable=1 then '1'else '' end," & _
                "[DefValue]=isnull(e.text,'')," & _
                "[FiledRem]=isnull(g.[value],'') " & _
                " FROM syscolumns a " & _
                " left join systypes b on a.xusertype=b.xusertype " & _
                " inner join sysobjects d on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties' " & _
                " left join syscomments e on a.cdefault=e.id " & _
                " left join sysproperties g on a.id=g.id and a.colid=g.smallid  " & _
                " left join sysproperties f on d.id=f.id and f.smallid=0 " & _
                " where d.name='" & DbTabName & "'" & _
                " order by a.id,a.colorder"

        DatRead = SqlReader(SqlConn, StrSql)

        ID = 0
        While DatRead.Read
            ReDim Preserve RevVal(ID)

            '//直接从数据库系统表取值.
            RevVal(ID).FieldActSize = 0                                                 '//实际数据长度
            RevVal(ID).FieldDefSize = CTeyeData.ToStr(DatRead.Item("DatLen"))           '//定义的数据长度
            RevVal(ID).FieldIsNull = CTeyeData.ToStr(DatRead.Item("IsNull"))            '//是否可为NULL
            RevVal(ID).FieldName = CTeyeData.ToStr(DatRead.Item("FiledName"))           '//字段名
            RevVal(ID).FieldType = CTeyeData.ToStr(DatRead.Item("FiledType"))           '//字段类型
            RevVal(ID).FieldTypeCode = CTeyeData.ToStr(DatRead.Item("FiledTypeCode"))   '//字段类型代号
            ID += 1
        End While
        DatRead.Close()
        Return RevVal

    End Function

#15


ding.........