求,打开查询到的所有表的所有列的方法

jasondct 2008-01-07 09:04:58
打开查询到所有表的所有列的的sql语句或aql.net代码(视图或存储过程也可以) (!!不用外部连接和完全连接)
例如;select * from sysobjects where xtype = 'u' --查询到 10多个表
这10 多个表里 分别有不同的列,每个表都有一个id列是连接字段。求 一个语句或用段代码实现打开查询到表的所有列
在线等。
...全文
286 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangopen 2008-07-21
  • 打赏
  • 举报
回复



CREATE PROCEDURE dbo.SysSeTableStruc
as

drop table SysTableStruc

SELECT
d.id,
(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 (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 '√' else '' end) 主键,

b.name 类型,

a.length 占用字节数,

COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度,

isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数,

(case when a.isnullable=1 then '√'else '' end) 允许空,

isnull(e.text,'') 默认值,

isnull(g.[value],'') AS 字段说明

into SysTableStruc

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

GO
jasondct 2008-02-29
  • 打赏
  • 举报
回复
我原来一直用2000的数据,现在用sql2005再试试
jasondct 2008-01-08
  • 打赏
  • 举报
回复
o 好的 谢谢
teachman_999 2008-01-08
  • 打赏
  • 举报
回复

我说老兄,你自已花点时间仔细看看问题出在那里啊,我也只是按照你那个意思写出来的。。

#temp_sysobjects ,这个临时表有数据没,一步步调试下。加条 select * from #temp_sysobjects 看看查出那些表没
jasondct 2008-01-08
  • 打赏
  • 举报
回复
自己再顶 等待高手 也希望 teachman_999兄,再看看问题
jasondct 2008-01-07
  • 打赏
  • 举报
回复
自己顶,并在线等待
jasondct 2008-01-07
  • 打赏
  • 举报
回复
所以 我没有找到好的方法。 来看看 大家有没有好的方法能解决。 动态连接也可以啊
teachman_999 2008-01-07
  • 打赏
  • 举报
回复
有新表增加时就要改代码 所以比较麻烦。

如果是这点,你不是不能用外部连接或完全连接,而是得动态构造inner join部分
jasondct 2008-01-07
  • 打赏
  • 举报
回复
这样能明白吗? 我一直在线,用完全连接可以实现。但是要写很多无用的代码,有新表增加时就要改代码 所以比较麻烦。
jasondct 2008-01-07
  • 打赏
  • 举报
回复
回复一楼 首先谢谢。
我要得到是 比如 查询到了a表(EPID,列a1,列a2,列a3,列a4),b表(EPID,列b1,列B2),
c表(EPID,列c1,列c2,列c3),d表(EPID,列d1,列d2),e表,f表,g表;这些表都有列 EPID;
结果是

EPID 列a1 列a2 列a3 列a4 列b1 列B2 列c1 列c2 列c3 .....
1 健康 aa 脂肪肝 xx 23 56 暗暗 cc 45
2 xx cc xx ss 78 56 aa aa 23
3 c xx xx ww 6 23 bb aa 12
4 20 cc xx cc 89 66 cc aa 23
5 dd dd cc cc 23 23 cc ee 21
6 null ww dd ww null null cc ee 23
7 谢谢 cc 啊 ww null null null rr null
后面省略了

mainbaby 2008-01-07
  • 打赏
  • 举报
回复
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
changjiangzhibin 2008-01-07
  • 打赏
  • 举报
回复
mark
glacier111 2008-01-07
  • 打赏
  • 举报
回复
把所有表做在一个视图里,没试过,只是个想法
upingking 2008-01-07
  • 打赏
  • 举报
回复
sp_columns 表名
可以用这个存储过程
如果要更详细的
使用sp_help 表名
LutzMark 2008-01-07
  • 打赏
  • 举报
回复
楼上正解
popeye627 2008-01-07
  • 打赏
  • 举报
回复

//说明:列出数据库里所有的表名
select name from sysobjects where type='U'

//说明:列出表里的所有的columns
select name from syscolumns where id=object_id('TableName')

jasondct 2008-01-07
  • 打赏
  • 举报
回复
我要带走笔记本了。 sql2005数据库在服务器上,
zmaini1420 2008-01-07
  • 打赏
  • 举报
回复
UP!~
jasondct 2008-01-07
  • 打赏
  • 举报
回复
运行成功后 ;
exec P_innerjoin 'EPID'

(0 行受影响)
消息 536,级别 16,状态 5,过程 P_innerjoin,第 24 行
传递到 SUBSTRING 函数的长度参数无效。
消息 536,级别 16,状态 5,过程 P_innerjoin,第 29 行
传递到 SUBSTRING 函数的长度参数无效。
消息 536,级别 16,状态 5,过程 P_innerjoin,第 33 行
传递到 SUBSTRING 函数的长度参数无效。
消息 156,级别 15,状态 1,第 1 行
关键字 'from' 附近有语法错误。

我再检查什么问题 呵呵
jasondct 2008-01-07
  • 打赏
  • 举报
回复
哥们 厉害 好人啊 我再测试一下。
加载更多回复(15)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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