`
ljzforever
  • 浏览: 117167 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

获取一张表中列的数据

    博客分类:
  • sql
 
阅读更多
要获取一张表的列本身的数据,首先要了解sqlserver中的五张系统表
sysobjects,syscolumns,systypes,sysindexes,sysindexkeys

sysobjects,每个数据库都有一张这样的系统表,它记录了所有数据库对象,比如我们从里面可以获取主键,表对象名等
sysindexes,每个数据库都有一张这样的系统表,它记录了所有表的索引,包括索引对象名等
sysindexkeys,每个数据库都有一张这样的系统表,它记录了所有的索引与对应的列
syscolumns,每个数据库都有一张这样的系统表,它记录了所有表的列,我们从里面可以获取表的某一列的序号,名称,是否可以为空等。
systypes,每个数据库都有一张这样的系统表,它记录了所有的数据类型,我们从里面可以获取表的某一列数据类型的名称,比如:varchar,int等

sysobjects里有个xtype字段,char(2)类型,它记录的是对象的类型:比如PK是主键,S是用户表,P是存储过程等,都是大写的,还有一个name字段,记录的是对象的名称
sysindexes里有个name字段,记录了对名象名称,还有个indid字段,记录了索引编号
sysindexkeys里有个indid字段,记录了索引编号,还有个colid,记录了列编号
syscolumns里也有个xtype字段,int类型,但它记录的却是本列数据类型的代码,一些数字,这些数字与systypes表里的xtype对应起来,这样就可以从systypes表中获取数据类型的名称了,还有个colid字段,记录了列编号,还有个name字段,记录了列名,colorder字段记录了列序号
systypes里有个xtype,int类型,记录了本列数据类型的代码,还有个name字段,记录了数据类型名

syscolumns,sysindexes,sysindexkeys中的id字段对应的是所属表的id,而不是自己数据的id
syscolumns,sysindexes,sysindexkeys中的数据不带有唯一性,因为这是所有表共用一个系统表,所以colid,indid之类的都只是在id即表名不同的情况下唯一

这样,跟据以上的分析,我们就能得到一个表的字段的具体信息了
从syscolumns中得到列序号,列名,是否可以为空
从syscolumns和systypes中得到数据类型
从全部五张表中得到主键信息
可以看出,主要是得到主键用的代码多啊!

select  a.colorder Number,
a.name ColumnName,
b.name Type,
(case when a.isnullable=1 then 'Y'else 'N' end) AllowNull,
(case when
(SELECT count(*) FROM sysobjects WHERE name IN
(SELECT name FROM sysindexes WHERE id = a.id AND indid in
(SELECT indid FROM sysindexkeys WHERE id = a.id AND colid in
(SELECT colid FROM syscolumns WHERE id = a.id AND name = a.name)))
AND xtype = 'PK')>0 then 'Y' else 'N'end) IsPrimaryKey
from  syscolumns a left join systypes b on  a.xtype=b.xusertype
where a.id=OBJECT_ID('b') order by a.colorder
分享到:
评论

相关推荐

    对换一张表中的两列数据

    可以使用临时表来交换两列数据,例如: ```sql select a, b into #tmp from tb1 delete from tb1 insert into tb1 (a, b) select b, a from #tmp drop table #tmp ``` 这将交换 tb1 表中的 a 和 b 两列数据。 使用...

    SQL实现两张无关联表的数据列合并在一张结果集中

    ### SQL实现两张无关联表的数据列合并在一张结果集中 #### 实现思路及技术要点解析 在实际工作中,我们经常会遇到需要将两张无关联表的数据列合并到一个结果集中的需求。这种操作可以帮助我们更好地组织数据,使得...

    求数据库表中列的个数

    2. **表结构对比**: 当需要比较两个不同环境(如开发环境和生产环境)中的同一张表是否完全相同时,可以通过对比它们的列数来进行初步判断。 3. **自动化脚本**: 在编写自动化脚本时,可能需要动态获取表的结构信息...

    Mysql将一个表中的某一列数据复制到另一个表中某一列里的方法

    有Navicat等工具更好,可以直接选中一列数据,拷贝粘贴到你需要的列中。如果是同一个表那没什么问题,如果是新表,请保持它们的行数是一致。如果行数不一致,你可以新建一个表,再把列拷贝进去,这样id数也会保持...

    从excel表中取数据,在oracle数据库中查询信息,然后导出到txt文件

    在本场景中,"从Excel表中取数据"可能包括选择特定的列或行,或者通过VBA(Visual Basic for Applications)脚本来自动化数据提取过程。 其次,Oracle数据库是企业级的关系型数据库管理系统,广泛用于存储和管理...

    SQLite数据表查询

    查询是数据库操作的核心部分,它允许我们从数据表中获取我们需要的信息。下面将详细解释两种主要的查询方法: 1. **rawQuery() 方法**: `rawQuery()` 是Android中的SQLiteHelper类提供的一个方法,它直接接收一个...

    在GRIDVIEW 控件中某一列显示下拉列表,并且绑定数据库的另外一张表

    在本场景中,我们关注的是如何在GridView控件中实现某一列显示下拉列表,并且这个下拉列表的数据来源于数据库的另一张表。GridView控件是ASP.NET中用于显示数据集的强大工具,它允许用户对数据进行查看、编辑和排序...

    在同一数据库中将一个表中文件备份到另一个表

    表是Oracle数据库中最基本的数据结构,存储着结构化的数据。 Java与Oracle数据库的交互主要依赖于JDBC(Java Database Connectivity),这是一个Java API,允许Java应用程序连接并操作任何兼容JDBC的数据库,包括...

    最新全国地区表SQL一张表

    标题中的“最新全国地区表SQL一张表”表明这...总之,这个“最新全国地区表SQL一张表”是开发和数据分析工作中非常实用的资源,它提供了全面的中国地区数据,并且以数据库友好的方式组织,便于在各种系统中集成和操作。

    PB 11.5 数据窗口计算列显示图片方法实例

    在数据窗口的Fetch事件或RowReady事件中,我们可以获取到当前行的数据,并根据这些数据决定应该显示哪个图片。例如,如果图片存储在数据库中,我们可能需要先从BLOB字段中读取二进制数据,然后转换成图像对象。如果...

    MySQL 从一张表update字段到另外一张表中

    当你需要将一张表中的某些字段值复制并更新到另一张表时,可以利用SQL的JOIN语句或者子查询来实现。这个过程通常涉及到多表关联,确保正确匹配源数据和目标数据。在MySQL 4.0及以上版本中,这样的功能变得更加灵活。...

    拆分数据库中某列某行的数据,大量处理

    以描述中的例子为例,假设我们有一张表,其中一列包含复合信息,如“姓名-年龄-性别”。如果我们要将这一列的数据分别存储到单独的“姓名”、“年龄”和“性别”列,我们可以编写一个函数或存储过程来实现这个目标。...

    利用delphi中的内存表来制作主从表

    在数据库设计中,主从表(也称为父子表或主键-外键关系)是指两个表之间的一种关联,其中一张表(主表)包含唯一标识记录的主键,另一张表(从表)则通过外键字段引用主表的主键,以此建立关联。这种设计模式有助于...

    C#与MySql数据表

    通过设置`DataGridView.DataSource`属性为数据集或数据表,即可在控件中展示数据。 5. ** DataGridView控件**:`DataGridView`是Windows Forms中用于显示表格数据的控件。它可以显示数据库中的数据,也可以进行编辑...

    数据获取器 dataget

    Dataget可能会把像素值、颜色信息或者其他特征转换成一列列的数据,便于在Excel中进行统计分析和可视化。这一步骤可能涉及到数据的标准化、归一化或编码,确保所有数据都适合Excel的表格结构。 一旦数据被整理好,...

    excel宏(将一个工作簿拆成多个工作表)

    - 遍历字典中的键值对,创建新的工作表或重用已存在的工作表,并将相关数据复制到新工作表中。 - 通过`Sheets.Add(After:=Sheets(Sheets.Count)).Name = k(i)`创建一个新的工作表,并命名为键的值。 - 通过`Rng....

    PL/SQL实现获得所有表名及列名到表

    - **元数据查询**:利用Oracle数据库的元数据视图`USER_TAB_COLUMNS`,该视图提供了用户所有表的列信息。 - **PL/SQL过程**:编写一个PL/SQL块,使用游标(CURSOR)遍历`USER_TAB_COLUMNS`视图中的数据,提取表名和...

    Excel数据透视表培训.pptx

    - 刷新数据:当源数据更新时,需要手动刷新数据透视表以获取最新信息。 - 格式设置:可以自定义数据透视表的样式,包括字体、字号等,甚至可以保存特定的格式。 - 自动套用格式:利用Excel内置的样式快速改变数据...

    Excel数据透视表的日常应用技巧.docx

    Excel数据透视表是Excel中强大的数据分析工具,它能够快速对大量数据进行分类、聚合和分析,帮助用户轻松获取数据的统计信息。在Excel 2007及更高版本中,数据透视表位于“插入”选项卡的第一个功能,体现了其在日常...

    Oracle数据库中大型表查询优化的研究

    在Oracle数据库中,大型表查询优化是一个至关重要的主题,尤其对于处理海量数据的企业级应用而言。Oracle数据库以其高效、稳定和强大的功能著称,但在处理大规模数据时,如果不进行适当的优化,查询性能可能会显著...

Global site tag (gtag.js) - Google Analytics