【问题标题】:Getting Table Information获取表信息
【发布时间】:2011-12-03 03:08:04
【问题描述】:

我正在尝试获取表信息并给出表名,因此我编写了这样的查询:

 SELECT so.name, sc.name, st.name, sc.length, CASE WHEN sc.status = 0x80 THEN 'Y' ELSE 'N' END AS IsIdent, ColOrder
   FROM Asdim.dbo.sysobjects so
   INNER JOIN Asdim.dbo.syscolumns sc
   ON so.id=  sc.id
   INNER JOIN Asdim.dbo.systypes st
   ON sc.xtype = st.xusertype
   WHERE so.Name = 'Admin'

问题是我有两个名为“Admin”的表,但它们有不同的架构。所以当我运行这个查询时:

SELECT * FROM Asdim.dbo.sysobjects WHERE name LIKE 'Admin'

我得到两条记录,因为表名相同。有没有办法我也可以根据架构名称过滤掉?

【问题讨论】:

标签: sql-server tsql sql-server-2008 sysobjects


【解决方案1】:

您使用的视图都已弃用,只是为了向后兼容而提供。使用新视图给出了。

SELECT t.name,
       c.name,
       ty.name,
       c.is_identity,
       c.max_length,
       c.column_id
FROM sys.tables t
JOIN sys.schemas s ON s.schema_id=t.schema_id
JOIN sys.columns c ON c.object_id = t.object_id
JOIN sys.types ty ON ty.user_type_id = c.user_type_id
WHERE t.name LIKE '%Admin%' AND s.name = 'dbo'

INFORMATION_SCHEMA.COLUMNS 几乎包含您需要的所有信息,但缺少有关身份列的信息。

【讨论】:

  • 太棒了,非常感谢。找这个很久了
猜你喜欢
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
  • 2019-07-16
  • 2019-07-17
相关资源
最近更新 更多