sql数据库在一个表里面,知道某个值"a",如何获取其所属列的列名

sql数据库在一个表里面,知道某个值"a",如何获取其所属列的列名,第1张

需要这样搜索的话,你的表肯定没建好,一般程序不建议这么搜。

一定要这么搜的话只能一列列遍历每个单元格的值。

得先知道所有列名和顺序,然后双重循环,外循环遍历列,内循环遍历单元格。

当内循环遍历到当前单元格值含a后,输出当前外循环列名,然后可跳出或继续循环。

当数据多的话,这样肯定不行的。

建议你再优化一下建表。

这个方法写在程序里的,不是直接的sql查询语句

SQL 2005及以上版本,执行如下,可获取字段及相关属性值

SELECT aname 字段名 ,

COLUMNPROPERTY(aid, aname, 'IsIdentity') 标识 ,

( CASE WHEN ( SELECT COUNT()

FROM sysobjects

WHERE ( name IN (

SELECT name

FROM sysindexes

WHERE ( id = aid )

AND ( indid IN (

SELECT indid

FROM sysindexkeys

WHERE ( id = aid )

AND ( colid IN (

SELECT

colid

FROM

syscolumns

WHERE

( id = aid )

AND ( name = aname ) ) ) ) ) ) )

AND ( xtype = 'PK' )

) > 0 THEN '1'

ELSE '0'

END ) 主键 ,

bname 类型 ,

COLUMNPROPERTY(aid, aname, 'PRECISION') AS 长度 ,

ISNULL(COLUMNPROPERTY(aid, aname, 'Scale'), 0) AS 小数位数 ,

( CASE WHEN aisnullable = 1 THEN '1'

ELSE '0'

END ) 允许空 ,

ISNULL(g[value], '') AS 字段说明

FROM syscolumns a

LEFT JOIN systypes b ON axtype = bxusertype

INNER JOIN sysobjects d ON aid = did

AND dxtype = 'U'

AND dname <> 'dtproperties'

LEFT JOIN syscomments e ON acdefault = eid

LEFT JOIN sysextended_properties g ON aid = gmajor_id

AND acolid = gminor_id

WHERE dname = 'AA_AppFile'

ORDER BY aid ,

acolorder

注:sql2000版本中,需要使用sysproperties来代替sysextended_properties。

  SqlConnection thisConnection = new SqlConnection(ConfigurationManagerAppSettings["ConnectionString"]ToString());

            // Open connection

            thisConnectionOpen();

            // Create command for this connection

            SqlCommand thisCommand = thisConnectionCreateCommand();

            // Specify SQL query for this command

            thisCommandCommandText = sCommandText;

            // Execute DataReader for specified command

            SqlDataReader thisReader = thisCommandExecuteReader();

            // While there are rows to read

            //

            //

            View_LogDetailEntity = new List<CView_LogDetail>();//初始化集合

 string sColumnName = stringEmpty;

  while (thisReaderRead())

            {

                CView_LogDetail myCView_LogDetail = new CView_LogDetail();

                for (int i = 0; i < thisReaderFieldCount; i++)

                {

                      sColumnName = thisReaderGetName(i)Trim();

                }

           }

select COLUMN_NAME from information_schemacolumns where table_name='b'

select count() from information_schemaCOLUMNS WHERE TABLE_SCHEMA='a' and table_name=‘b’

a是库名,b是表明

microsoft sql server management studio中展开对应表下面的列信息不就可以看到列的详细信息了么?当然这是可以的,但这里我们主要讲的时如何利用sql语句来查询指定表的列信息。

利用sql语句来查询列信息,就是要用到系统视图syscolumns,这个视图记录了数据库中所有表,视图,表值函数等的所有列信息。我们可以利用语句select from syscolumns来查看这个视图返回的信息。

syscolumns返回的列比较多,大部分情况下很多列的信息我们可能用不到,下面我们只解释一下比较常用的列的信息。

1,object_id--这个列是比较重要的,它是返回当前列所属表的ID。利用它,我们就可以查询指定表的所有列信息,比如下面的sql语句是查询表table1的所有列信息。

select from syscolumns where object_id=object_id('table1')

2,name--该列的列名。

3,column_id--该列在数据库中的ID,注意,数据库中任何对象的ID都是唯一的。

4,system_type_id--该列的类型的ID,和下面max_length,precision,scale三列一起可以来举个示例。

5,max_length--该列的最大长度

6,precisionp--如果这列是数值列,那么这是该列的精度,否则就是0

7,scale--如果这列是数值列,那么这就是列的小数位数,否则就是0

system_type_id,max_length,precision,scale四列结合系统视图systypes一起我们来举个示例。

如果我们要查询表table1的所有列,及列的类型,列的精度,列的小数位数,sql语句如下:

select aname,bname,amax_length,aprecision,ascale

from syscolumns a left join systypes b on auser_type_id=buser_type_id

where aobject_id=object_id('table1')

8,is_nullable--该列是否可以为null

9,is_identity--该列是否是标识列

10,is_computed--该列是否是计算列。利用该列,我们也就可以查询某个表的所有计算列了,比如我们要查询表table1中的所有计算列,sql语句如下:

select from syscolumns where object_id=object_id('table1') and is_computed=1

syscolumns视图中常用的列就是这10列了,其它列的信息大家可以到SQLServer 2005联机丛书中查询

以上就是关于sql数据库在一个表里面,知道某个值"a",如何获取其所属列的列名全部的内容,包括:sql数据库在一个表里面,知道某个值"a",如何获取其所属列的列名、sql server 查询列名,列数据类型,列长度 sql语句怎么写、C# 中SqlDataReader怎么获取列名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9663466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存