总结了一部分Transact-SQL的基础知识,自己留着慢慢看吧!
sysobjects
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。
列名 | 数据类型 | 描述 |
name | sysname | 对象名。 |
Id | int | 对象标识号。 |
xtype | char(2) | 对象类型。可以是下列对象类型中的一种: C = CHECK 约束 D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 L = 日志 FN = 标量函数 IF = 内嵌表函数 P = 存储过程 PK = PRIMARY KEY 约束(类型是 K) RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器 U = 用户表 UQ = UNIQUE 约束(类型是 K) V = 视图 X = 扩展存储过程 |
uid | smallint | 所有者对象的用户 ID。 |
info | smallint | 保留。仅限内部使用。 |
status | int | 保留。仅限内部使用。 |
base_schema_ ver | int | 保留。仅限内部使用。 |
replinfo | int | 保留。供复制使用。 |
parent_obj | int | 父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID)。 |
crdate | datetime | 对象的创建日期。 |
ftcatid | smallint | 为全文索引注册的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0。 |
schema_ver | int | 版本号,该版本号在每次表的架构更改时都增加。 |
stats_schema_ ver | int | 保留。仅限内部使用。 |
type | char(2) | 对象类型。可以是下列值之一: C = CHECK 约束 D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 FN = 标量函数 IF = 内嵌表函数 K = PRIMARY KEY 或 UNIQUE 约束 L = 日志 P = 存储过程 R = 规则 RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器 U = 用户表 V = 视图 X = 扩展存储过程 |
userstat | smallint | 保留。 |
sysstat | smallint | 内部状态信息。 |
indexdel | smallint | 保留。 |
refdate | datetime | 留作以后使用。 |
version | int | 留作以后使用。 |
deltrig | int | 保留。 |
instrig | int | 保留。 |
updtrig | int | 保留。 |
seltrig | int | 保留。 |
category | int | 用于发布、约束和标识。 |
cache | smallint | 保留。 |
sys.sysindexkeys (Transact-SQL)
看来微软是打算抛弃他了
包含有关数据库的索引中的键或列的信息。
重要提示: | ||
将此 SQL Server 2000 系统表作为一个视图包含进来是为了保持向后兼容性。建议您改用当前的 SQL Server 系统视图。若要查找一个或多个等效系统视图,请参阅将 SQL Server 2000 系统表映射到 SQL Server 2005 系统视图。后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 | ||
列名 | 数据类型 | 说明 |
id | int | 表的 ID。 |
indid | smallint | 索引的 ID。 |
colid | smallint | 列的 ID。 |
keyno | smallint | 该列在索引中的位置。 |
syscolumns
每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。
列名 | 数据类型 | 描述 |
name | sysname | 列名或过程参数的名称。 |
id | int | 该列所属的表对象 ID,或与该参数关联的存储过程 ID。 |
xtype | tinyint | systypes 中的物理存储类型。 |
typestat | tinyint | 仅限内部使用。 |
xusertype | smallint | 扩展的用户定义数据类型 ID。 |
length | smallint | systypes 中的最大物理存储长度。 |
xprec | tinyint | 仅限内部使用。 |
xscale | tinyint | 仅限内部使用。 |
colid | smallint | 列或参数 ID。 |
xoffset | smallint | 仅限内部使用。 |
bitpos | tinyint | 仅限内部使用。 |
reserved | tinyint | 仅限内部使用。 |
colstat | smallint | 仅限内部使用。 |
cdefault | int | 该列的默认值 ID。 |
domain | int | 该列的规则或 CHECK 约束 ID。 |
number | smallint | 过程分组时(0 表示非过程项)的子过程号。 |
colorder | smallint | 仅限内部使用。 |
autoval | varbinary(255) | 仅限内部使用。 |
offset | smallint | 该列所在行的偏移量;如果为负,表示可变长度行。 |
status | tinyint | 用于描述列或参数属性的位图: 0x08 = 列允许空值。 0x10 = 当添加 varchar 或 varbinary 列时,ANSI 填充生效。保留 varchar 列的尾随空格,保留 varbinary 列的尾随零。 0x40 = 参数为 OUTPUT 参数。 0x80 = 列为标识列。 |
type | tinyint | systypes 中的物理存储类型。 |
usertype | smallint | systypes 中的用户定义数据类型 ID。 |
printfmt | varchar(255) | 仅限内部使用。 |
prec | smallint | 该列的精度级别。 |
scale | int | 该列的小数位数。 |
iscomputed | int | 表示是否已计算该列的标志: 0 = 未计算。 1 = 已计算。 |
isoutparam | int | 表示该过程参数是否是输出参数: 1 = 真。 0 = 假。 |
isnullable | int | 表示该列是否允许空值: 1 = 真。 0 = 假。 |
systypes
对于每种系统提供数据类型和用户定义数据类型,均包含一行信息。该表存储在每个数据库中。
这些是系统提供的数据类型及其 ID 号。
列名 | 数据类型 | 描述 |
name | sysname | 数据类型名称。 |
xtype | tinyint | 物理存储类型。 |
status | tinyint | 仅限内部使用。 |
xusertype | smallint | 扩展用户类型。 |
length | smallint | 数据类型的物理长度。 |
xprec | tinyint | 服务器所使用的内部精度。(不能在查询中使用。) |
xscale | tinyint | 服务器所使用的内部小数位数。(不能在查询中使用。) |
tdefault | int | 对此数据类型进行完整性检查的存储过程的 ID。 |
domain | int | 对此数据类型进行完整性检查的存储过程的 ID。 |
uid | smallint | 数据类型创建者的用户 ID。 |
reserved | smallint | 仅限内部使用。 |
usertype | smallint | 用户类型 ID。 |
variable | bit | 可变长度数据类型为 1;否则为 0。 |
allownulls | bit | 指出此数据类型的默认为空性。如果 CREATE 或 ALTER TABLE 指定了为空性,那么该值将替代此数据类型的默认为空性。 |
type | tinyint | 物理存储数据类型。 |
printfmt | varchar(255) | 保留。 |
prec | smallint | 此数据类型的精度级别。 |
scale | tinyint | 此数据类型的小数位数(根据精度)。 |
获取系统表信息-2000
sql2000
SELECT
表名 = CASE WHEN a.colorder = 1 THEN d.name ELSE '' END ,
表说明 = CASE WHEN a.colorder = 1 THEN isnull (f.value, '' ) ELSE '' END ,
字段序号 = a.colorder ,
字段名 = a.name ,
标识 = CASE WHEN COLUMNPROPERTY (a.id, a.name, ' IsIdentity ' ) = 1 THEN ' √ ' ELSE '' END ,
主键 = CASE WHEN EXISTS ( SELECT 1 FROM dbo.sysindexes si INNER JOIN
dbo.sysindexkeys sik ON si.id = sik.id AND si.indid = sik.indid INNER JOIN
dbo.syscolumns sc ON sc.id = sik.id AND sc.colid = sik.colid INNER JOIN
dbo.sysobjects so ON so.name = so.name AND so.xtype = ' PK '
WHERE sc.id = a.id AND sc.colid = a.colid) THEN ' √ ' ELSE '' END ,
类型 = b.name ,
长度 = a.length ,
精度 = COLUMNPROPERTY (a.id, a.name, ' PRECISION ' ) ,
小数位数 = ISNULL ( COLUMNPROPERTY (a.id, a.name, ' Scale ' ), 0 ) ,
允许空 = CASE WHEN a.isnullable = 1 THEN ' √ ' ELSE '' END ,
默认值 = ISNULL (e. text , '' ),
字段说明 = ISNULL (g. [ value ] , '' ),
创建时间 = d.crdate,
更改时间 = CASE WHEN a.colorder = 1 THEN d.refdate ELSE NULL END
FROM dbo.syscolumns a LEFT OUTER JOIN
dbo.systypes b ON a.xtype = b.xusertype INNER JOIN
dbo.sysobjects d ON a.id = d.id AND d.xtype = ' U ' AND
d.status >= 0 LEFT OUTER JOIN
dbo.syscomments e ON a.cdefault = e.id LEFT OUTER JOIN
dbo.sysproperties g ON a.id = g.id AND a.colid = g.smallid AND
g.name = ' MS_Description ' LEFT OUTER JOIN
dbo.sysproperties f ON d.id = f.id AND f.smallid = 0 AND
f.name = ' MS_Description '
ORDER BY d.id, a.colorder
--而且内容
--1:获取当前数据库中的所有用户表
select Name from sysobjects where xtype='u' and status>=0
--2:获取某一个表的所有字段
select name from syscolumns where id=object_id('表名')
--3:查看与某一个表相关的视图、存储过程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
--4:查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P' and name not like 'sp_%'--过滤系统存储过程
--5:查询用户创建的所有数据库
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
--6:查询某一个表的字段和数据类型
select column_name,data_type from information_schema.columns
where table_name = '表名'
--7:查询某张表的主键(参考SqlServer系统存储过程sp_pkeys)
select COLUMN_NAME = convert(sysname,c.name)
from sysindexes i, syscolumns c, sysobjects o
where o.id = object_id('[YourTableName]')
and o.id = c.id
and o.id = i.id
and (i.status & 0x800) = 0x800
and (c.name = index_col ('[YourTableName]', i.indid, 1) or
c.name = index_col ('[YourTableName]', i.indid, 2) or
c.name = index_col ('[YourTableName]', i.indid, 3) or
c.name = index_col ('[YourTableName]', i.indid, 4) or
c.name = index_col ('[YourTableName]', i.indid, 5) or
c.name = index_col ('[YourTableName]', i.indid, 6) or
c.name = index_col ('[YourTableName]', i.indid, 7) or
c.name = index_col ('[YourTableName]', i.indid, 8) or
c.name = index_col ('[YourTableName]', i.indid, 9) or
c.name = index_col ('[YourTableName]', i.indid, 10) or
c.name = index_col ('[YourTableName]', i.indid, 11) or
c.name = index_col ('[YourTableName]', i.indid, 12) or
c.name = index_col ('[YourTableName]', i.indid, 13) or
c.name = index_col ('[YourTableName]', i.indid, 14) or
c.name = index_col ('[YourTableName]', i.indid, 15) or
c.name = index_col ('[YourTableName]', i.indid, 16))
--7:查询某张表的外键
select t1.name,t2.rtableName,t2.name
from (select col.name, f.constid as temp
from syscolumns col,sysforeignkeys f
where f.fkeyid=col.id
and f.fkey=col.colid
and f.constid in (select distinct(id)
from sysobjects
where OBJECT_NAME(parent_obj)='YourTableName'
and xtype='F')
)as t1 ,
(select OBJECT_NAME(f.rkeyid) as rtableName,col.name, f.constid as temp
from syscolumns col,sysforeignkeys f
where f.rkeyid=col.id
and f.rkey=col.colid
and f.constid in (select distinct(id)
from sysobjects
where OBJECT_NAME(parent_obj)='YourTableName'
and xtype='F')
) as t2
where t1.temp=t2.temp
-2005
SELECT
表名=CASE WHEN a.colorder = 1 THEN d.name ELSE '' END,
表说明=CASE WHEN a.colorder = 1 THEN isnull(f.value, '') ELSE '' END ,
字段序号=a.colorder ,
字段名=a.name ,
标识=CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '√' ELSE '' END ,
主键=CASE WHEN EXISTS (SELECT 1 FROM dbo.sysindexes si INNER JOIN
dbo.sysindexkeys sik ON si.id = sik.id AND si.indid = sik.indid INNER JOIN
dbo.syscolumns sc ON sc.id = sik.id AND sc.colid = sik.colid INNER JOIN
dbo.sysobjects so ON so.name = so.name AND so.xtype = 'PK'
WHERE sc.id = a.id AND sc.colid = a.colid) THEN '√' ELSE '' END ,
类型=b.name ,
长度=a.length ,
精度=COLUMNPROPERTY(a.id, a.name, 'PRECISION') ,
小数位数=ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0) ,
允许空=CASE WHEN a.isnullable = 1 THEN '√' ELSE '' END ,
默认值= ISNULL(e.text, ''),
字段说明=ISNULL(g.[value], ''),
创建时间=d.crdate,
更改时间=CASE WHEN a.colorder = 1 THEN d.refdate ELSE NULL END
FROM dbo.syscolumns a LEFT OUTER JOIN
dbo.systypes b ON a.xtype = b.xusertype INNER JOIN
dbo.sysobjects d ON a.id = d.id AND d.xtype = 'U' AND
d.status >= 0 LEFT OUTER JOIN
dbo.syscomments e ON a.cdefault = e.id LEFT OUTER JOIN
sys.extended_properties g ON a.id = g.major_id AND a.colid = g.minor_id LEFT OUTER JOIN
sys.extended_properties f ON d.id = f.major_id AND f.minor_id = 0
ORDER BY d.id, a.colorder
转载于:https://www.cnblogs.com/jianglai11/archive/2010/04/09/1708503.html