百分求解,高手进来看看!查询表结构信息!

sandman 2005-02-28 03:32:48
想通过查询系统表得到一个用户表的结构信息,包括字段名、长度、是否允许空等,其他都已经实现,现在有问题的是如何判断一个字段是否为自增字段,如果是的话标识种子为多少,递增量为多少。要求:将查询语句加入以下语句中,一次查询得出所需结果。
(现在“是否自增”为空列)
SELECT a.name AS 表名, b.name AS 字段名称, c.name AS 数据类型, b.length AS 长度,
b.isnullable AS 允许空, e.text as 默认值, '' AS 是否自增,d.[value] AS 描述
FROM dbo.sysproperties d RIGHT OUTER JOIN
dbo.syscomments e RIGHT OUTER JOIN
dbo.syscolumns b INNER JOIN
dbo.sysobjects a ON b.id = a.id ON e.id = b.cdefault ON d.smallid = b.colid AND
d.id = a.id LEFT OUTER JOIN
dbo.systypes c ON b.xtype = c.xtype
WHERE (a.xtype = 'u') AND (a.name =:TableName)
...全文
119 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sandman 2005-02-28
  • 打赏
  • 举报
回复
佩服佩服!
关注者5分,剩余分给风云
非常感谢!
希望此贴对大家查询表结构信息时都有参考作用!:)
ljleager 2005-02-28
  • 打赏
  • 举报
回复
pbsql(风云),我测试过了,pbsql(风云)的方法不错,快结贴吧!
dxhdxh 2005-02-28
  • 打赏
  • 举报
回复
使用临时表把 1。自增字段名 2。标识种子 3。递增量 保存 再建一个关键字段就能与你的查询关联
然后采用左查询就能在一个查询语句了
pbsql 2005-02-28
  • 打赏
  • 举报
回复
这个可以了:
SELECT
表名=case when a.colorder=1 then d.name else '' end,
字段序号=a.colorder,
字段名=a.name,
是否为自增字段=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '是'else '否' end,
标识种子=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then IDENT_SEED(d.name) else null end,
递增量=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then IDENT_INCR(d.name) else null end,
主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND 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],'')
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sysproperties g on a.id=g.id and a.colid=g.smallid
--where d.name='表名'
order by a.id,a.colorder
sandman 2005-02-28
  • 打赏
  • 举报
回复
To风云:
你提供的写法并未实现我要查询的“是否为自增字段”的要求,不过对我仍然有参考价值,谢谢!
sandman 2005-02-28
  • 打赏
  • 举报
回复
我已经可以得到以下三部分:
1。自增字段名 SELECT IDENTITYCOL from TableName (返回的列名为自增字段名)
2。标识种子 Select IDENT_SEED ( TableName )
3。递增量 Select IDENT_INCR ( TableName )
问题是如何插入到那些查询语句中形成一个查询语句?
尤其是什么左右join,实在搞不定!
继续求教!。。。
pbsql 2005-02-28
  • 打赏
  • 举报
回复
参考这个:
SELECT
表名=case when a.colorder=1 then d.name else '' end,
字段序号=a.colorder,
字段名=a.name,
标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND 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],'')
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sysproperties g on a.id=g.id and a.colid=g.smallid
order by a.id,a.colorder
jinjazz 2005-02-28
  • 打赏
  • 举报
回复
sp_MShelpcolumns 表名 结果中有个col_seed就是你要的
fesxe 2005-02-28
  • 打赏
  • 举报
回复
求解中.................

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧