【问题标题】:List table names, owner, schema and columns in SQL server database列出 SQL Server 数据库中的表名、所有者、模式和列
【发布时间】:2014-09-29 03:41:03
【问题描述】:

在 SQL SERVER 中如何获取所有表名、列名和所有者的列表?
我已经这样做了,但是我在哪里可以获得 OWNER 详细信息?

SELECT t.name AS tableName, 
       s.name SchemaName 
FROM   sys.tables AS t 
       INNER JOIN sys.schemas AS s 
               ON t.[schema_id] = s.[schema_id] 

【问题讨论】:

  • 架构和所有者之间存在差异。阅读this link 了解更多详情。如果您需要阅读Schema.Table.Columns 列表,最好使用专用的INFORMATION_SCHEMA(包含TABLESCOLUMNS 视图)SQL-92 标准视图。
  • 我想使用信息模式没有的对象ID。我必须查找用户提供的特定表名和列名,并查看他/她是否有权通过架构访问该表
  • 您可以使用 OBJECT_ID('schema.name') 函数来获取表 object_id。

标签: sql-server schema owner


【解决方案1】:

请注意,“TABLE_OWNER”与“SCHEMA Owner”相同,“TABLE_TYPE”将识别项目是表还是视图。

希望这会有所帮助!

--This will return all tables, table owners and table types for all database(s) that are NOT 'Offline'
--Offline database information will not appear

Declare @temp_table table(
DB_NAME varchar(max),
TABLE_OWNER varchar(max),
TABLE_NAME varchar(max),
TABLE_TYPE varchar(max),
REMARKS varchar(max)
)

INSERT INTO @temp_table (DB_NAME, TABLE_OWNER, TABLE_NAME, TABLE_TYPE,REMARKS)

EXECUTE master.sys.sp_MSforeachdb 'USE [?]; EXEC sp_tables'

SELECT * 
FROM @temp_table 
--Uncomment below if you are seaching for 1 database
--WHERE DB_NAME = '<Enter specific DB Name>'

--For all databases other than 'System Databases'
WHERE DB_NAME not in ('master','model','msdn','tempdb')
order by 1

【讨论】:

    【解决方案2】:

    您是否尝试过使用内置的sp_tables 存储过程?用法见http://msdn.microsoft.com/en-us/library/ms186250.aspx

    我会将此添加为评论,但我显然需要 50 声望才能这样做。

    【讨论】:

    • 我实际上必须检查是否存在由所有者提供的表名、列名(表存在的模式所有者)。
    • 我可以从插入的触发器中提供所需的表名和列名并让 sp_table 返回答案吗?
    • 所以我可以使用下面的代码获取 table_name 和 owner 但如何获取列名? EXEC sp_tables @table_name = '%', @table_owner = '%'
    • 您可以将参数传递给 sp_tables,例如 exec sp_tables &lt;table name&gt;,您将获得该表的详细信息。
    猜你喜欢
    • 2011-05-17
    • 2018-02-07
    • 2011-04-12
    • 2014-10-04
    • 2012-09-23
    • 1970-01-01
    • 2020-10-02
    • 2021-09-05
    • 1970-01-01
    相关资源
    最近更新 更多