sql2008 查看字段、添加字段实例

发布时间:2020-10-03编辑:脚本学堂
介绍下在sql2008中查看字段与添加字段的方法,学习下sql 2008下字段操作的相关命令,有需要的朋友参考下。

1,Sql2008查看字段
 

复制代码 代码示例:
SELECT COLUMN_NAME,DATA_TYPE FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME= 'usr'

要从系统表中查询了。
 

复制代码 代码示例:
select a.name as [column],b.name as type
from syscolumns a,systypes b
where a.id=object_id('表名') and a.xtype=b.xtype
 

把“表名”替换成你要查看字段类型的表名,比如你要查看sysobjects表的各字段类型那么就是
 

复制代码 代码示例:
select a.name as [column],b.name as type
from syscolumns a,systypes b
where a.id=object_id('sysobjects') and a.xtype=b.xtype
 

另外,可以通过存储过程
exec sp_help 表名
来查看表各字段的信息,其中就包括字段类型。
 

复制代码 代码示例:
SELECT DISTINCT sysobjects.name, syscolumns.colid,syscolumns.name, systypes.name, syscolumns.prec, syscolumns.scale
FROM syscolumns, sysobjects, systypes
WHERE sysobjects.id = syscolumns.id AND systypes.type = syscolumns.type AND ((sysobjects.type='u'))

在应用SQL Server的基于客户机/服务器体系结构的信息系统开发中,
有时需 要将后台SQL Server上的某一数据库的表结构都打印出来,
以便于开发人员查阅及最终文档的形成。SQL Server本身提供了一个系统存储过程 (SP_COLUMNS),
可以完成对单个表结构的查询,只要在SQL Server的ISQL-W工具中键入SP_COLUMNS “表名”,
并执行即 可得到结果集。但该方法有许多不足之处,其主要缺点是:
  1) 只能对单表进行操作,当需要查询一个数据库中所有的表时,需要多次执行SP_COLUMNS ,因此显得非常繁琐。
  2) 查询结果集中包含了许多不必要的信息。
  下面我们创建一个存储过程来完成对某一个数据库中所有表结构的查询。
  在创建一个数据库的同时,系统会自动建立一些系统表,限于篇幅的缘故我们在这里只介绍与应用实例有关的三个系统表(SYSOBJECTS,SYSCOLUMNS,SYSTYPES)及其相关的字段。
  表SYSOBJECTS为数据库内创建的每个对象(约束,规则,表,视图,触发器等)创建一条记录。
  该表相关字段的含义如下:
  SYSOBJECTS.name 对象名,如:表名,视图名。
  SYSOBJECTS.id 对象id。
  SYSOBJECTS.type 对象类型(p存储过程,v视图,s系统表,u用户表)。
  表SYSCOLUMNS 为每个表、视图中的每个列和每个存储过程的每个参数创建一条记录。
  该表相关字段的含义如下:(此处的列系指数据库中每个表、视图中的列)
  SYSCOLUMNS. id 该列所属的表的id,可与SYSOBJECTS.id相关联
  SYSCOLUMNS.colid列id,表示该列是表或视图的第几列。
  SYSCOLUMNS.type 物理存储类型,可与SYSTYPES.type相关联。
  SYSCOLUMNS.length数据的物理长度。
  SYSCOLUMNS.name 列名字,即字段名。
  SYSCOLUMNS .Pre 列的精度级。
  SYSCOLUMNS.Scale 列的标度级。
  表SYSTYPES 为每个系统和每个用户提供的数据类型创建一条记录,如果它们存在,给定域和默认值,描述系统提供的数据类型的行不可更改。
  该表相关字段的含义如下:
  SYSTYPES.name 数据类型的名字。
  SYSTYPES.type 物理存储数据类型。

在SQL SERVER的企业管理器(SQL ENTERPRISEMANAGER)中,选定某一数据库,创建存储过程print_dbstructure。
 

复制代码 代码示例:
if exists(select * from sysobjects where id = object_id('dbo. print_dbstructure
  ') and sysstat& 0xf = 4) 存储过程
  drop proceduredbo. print_dbstructure
  
  GO
  CREATE PROCEDUREprint_dbstructure
  
  AS
SELECT DISTINCTsysobjects.name, syscolumns.colid,
syscolumns.name,systypes.name, syscolumns.prec, syscolumns.scale
FROM syscolumns,sysobjects, systypes
WHEREsysobjects.id = syscolumns.id AND systypes.type = syscolumns.type AND((sysobjects.type='u'))
  
GO
 

首先,判断是否存在一个名为print_dbstructure的存储过程,如果存在,就摘除它,否则,定义sql语句建立新的存储过程。从三个系统表中选出满足条件的记录(即该数据库中保存在系统表中的用户表信息)。

执行时,在ISQL_W工具中,选定print_dbstructure所在的数据库,执行该存储过程,即可得到结果集(即该数据库中用户表的结构信息)。

SQL Server系统表的推广应用

以上所介绍存储过程的主要缺陷在于只能对服务器上某一特定的数据库(print_dbstructure所在的数据库)进行查询操作,可以通过在SQL Server系统数据库MASTER中建立带有数据库名参数的系统存储过程来解决此问题。