SQL查询:数据库对象与字段信息获取

5星 · 超过95%的资源 需积分: 10 5 下载量 176 浏览量 更新于2024-11-11 收藏 3KB TXT 举报
"查询数据库名,表名,表字段等" 在数据库管理和开发中,查询数据库的相关信息是常见的任务,这通常涉及到获取数据库名、表名、存储过程以及表字段等元数据。以下是对给定内容中涉及的SQL查询语句的详细解释: 1. 查询特定表的字段信息: `SELECT c.name AS tableName, a.name AS colName, b.name AS typeName, a.prec AS length, a.isNullable AS 是否为空 FROM syscolumns a, systypes b, sysobjects c WHERE a.xusertype = b.xusertype AND a.id = c.id AND c.name = 'AREA_INFO'` 这个查询用于获取名为'AREA_INFO'的表的所有字段名、字段类型、长度、是否可为空等信息。`syscolumns`、`systypes` 和 `sysobjects` 是SQL Server的系统表,分别存储列、数据类型和对象信息。 2. 查询所有用户定义的表: `SELECT name, id FROM sysobjects WHERE xtype='U'` 这个查询用于列出所有用户定义的表(xtype='U'表示用户定义的表)的名称和ID。 3. 获取存储过程的定义: `SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE='PROCEDURE' AND ROUTINE_NAME='fd'` 这是针对标准SQL的信息模式视图`INFORMATION_SCHEMA.ROUTINES`的查询,用于获取名为'fd'的存储过程的完整定义。 4. 查询所有数据库: `SELECT * FROM master.dbo.sysdatabases` 这将返回SQL Server主数据库中的所有数据库的信息。 5. 查询非系统数据库: `SELECT * FROM master.dbo.sysdatabases a WHERE a.sid <> 0x01` 此查询用于获取非系统数据库的信息,`sid <> 0x01` 条件排除了系统数据库。 6. 检查表是否具有主键: `SELECT (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 '1' ELSE '0' END) N'' FROM syscolumns a, systypes b, sysobjects c WHERE a.xtype = b.xusertype AND a.id = c.id AND c.xtype = 'U' AND c.name = 'aaa'` 这个复杂的查询用于确定名为'aaa'的表是否具有主键。如果存在主键,结果为'1',否则为'0'。 7. 创建表SC的示例: ``` CREATE TABLE SC ( sno char(6), cno char(8) ``` 这是一个创建名为'SC'的新表的SQL语句,包含两个字段`sno`和`cno`,它们都是字符类型,长度分别为6和8。 这些查询对于数据库管理员或开发人员来说非常有用,可以用来了解数据库的结构、验证表的完整性以及管理存储过程。通过熟悉和使用这些SQL语句,可以有效地管理和维护数据库。